首页 > 解决方案 > Python追加到列表中的同一行

问题描述

我编写了一段代码,用于搜索文本文件的目录,并根据我编写的 if 条件,复制、存储和写入新文件。我正在努力解决的问题是,当不同的 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,APPLE
    8.7, 23.8, id_08, ORANGE

在哪里mylist[0] = [11.3,4.8,id_06,BANANA]

标签: pythonarrayspython-3.xlistnumpy

解决方案


不完全确定它是否适合您的问题。但您可以尝试以下方法:

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)

这使用每行单独的列表,该列表被扩展以产生单个列表而不是列表列表,因为它会在附加数据时发生。每一行的列表都会被清除。这可能不是禁食或最优雅的方法,但它应该可以解决您的问题。


推荐阅读