如何解决Python追加到列表中的同一行
我编写了一段代码,用于搜索文本文件的目录,并根据我编写的if条件,将其复制,存储并写入新文件。我遇到的问题是,当如果条件附加到相同的空列表时不同,它将第二个“ if条件”的输出存储为新元素数组。但是,我希望将多个if条件的输出存储在同一行中。更具体地说,这是我的代码如何在文本文件中存储和写入。
import matplotlib.pyplot as plt
import numpy as np
import math
from scipy.optimize import curve_fit
from IPython import embed
import os
File = 'results.txt'
ospath = os.walk('/Users/analyses/')
mylist=[]
for subdir,dirs,files in ospath:
if File in files:
filepath = subdir + '/' + File
with open(filepath) as fp:
for line in fp:
line_list = []
if "Bckgnd subtracted source c/r" in line:
line_array = line.split(" ")
mylist.extend((line_array[5],line_array[7].rstrip("\n")))
elif "Bckgnd subtracted source cnts" in line:
line_array = line.split(" ")
mylist.extend((line_array[5],line_array[7].rstrip("\n")))
mylist.append(line_list)
mylist = np.asarray(mylist)
with open("mylist.txt","w") as txt_file:
for line in mylist:
txt_file.write('\n'.join(','.join(elems) for elems in mylist))
输出:
11.3,4.8
id_06,BANANA
9.3,5.6
id_01,APPLE
8.7,23.8
id_08,ORANGE
mylist[0] = [11.3,4.8] #comes from first if condition
mylist[1] = [id_06,BANANA] #comes from second if condition
我想要的方式:
11.3,4.8,id_06,BANANA
9.3,5.6,id_01,23.8,id_08,ORANGE
其中mylist[0] = [11.3,BANANA]
解决方法
不确定是否适合您的问题。但是您可以尝试以下操作:
mylist = []
with open(filepath) as fp:
for line in fp:
line_list = []
if "condition1" in line:
line_array = line.split(" ")
line_list.extend([line_array[5],line_array[7].rstrip("\n")])
if "condition2" in line:
line_array = line.split(" ")
line_list.extend((line_array[5],line_array[7].rstrip("\n")))
mylist.append(line_list)
mylist = np.asarray(mylist)
这每行使用一个单独的列表,该列表被扩展以产生单个列表,而不是列表的列表,因为附加数据会发生这种情况。将清除每一行的列表。 这可能不是斋戒或最优雅的方法,但它可以解决您的问题。
,示例代码中的几行缩进似乎是错误的-似乎for line in fp:
行应缩进一级,而mylist.append(...)
行应缩进一级。
关于您的问题:如果我正确理解,则您希望mylist.txt文件中同一行上的两个if条件都具有line_array。假设是这种情况,请尝试使用array.extend(...)
:
with open(filepath) as fp:
for line in fp:
line_array = []
if "condition1" in line:
line_array = line.split(" ")
mylist.extend([line_array[5],line_array[7].rstrip("\n")])
if "condition2" in line:
line_array = line.split(" ")
mylist.append([line_array[5],line_array[7].rstrip("\n")])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。