python-通过读取和处理文件来创建csv

时间:2017-05-09 23:22:59

标签: python python-2.7 csv

所以我试图读取一组文件并通过一个返回一组数字的函数运行它们。我需要用头写一个csv,我需要将文件名作为csv的第一列。

我尝试使用以下代码编写csv

path = 'input/files'
opath = 'output/csvs'
col_names = [file, n1,n2,n3,n4,n5]

tmp = np.sort(glob.glob(path))

csvfile = open('opath/test.csv','w')
writer = csv.writer(csvfile),delimiter=',',lineterminator='\n')
writer.writerow(col_names)  #writing header for the csv

for t in tmp:
    img = np.load(t)   
    writer.writerow([t, test(t))

csvfile.close()   

其中test()是一个虚拟函数,我用它来重现我函数的输出。它基本上读取文件并在处理后创建数字。因此它需要已加载的文件t并打印出计算结果。

def test(f):
    for i in range(f):
        print i,i+1,i-1,2*i

对于我尝试使用的最后一个test()函数:

print [i,i+1,i-1,2*i]
return [i,i+1,i-1,2*i]

所以我可以有一个列表来解析writerow(),但这似乎也不起作用。

我收到的输出看起来像这样

file1,"[(1,4,3,5)]"
file1,"(1,4,3,5)"

而不是想要的输出:file1,1,4,3,5

我不想使用字符串方法来编辑每一行,因为我将阅读大量文件,因此我的csvs非常大,我知道这不是正确的方法。

另外,我不认为单独存储每个输出因为列表将起作用,因为它将花费更多的时间来进行文件处理。我尝试按照this question的想法,但处理函数的输出似乎更容易处理,问题似乎有点不同。

有关如何解决此问题的任何建议或见解?

1 个答案:

答案 0 :(得分:0)

很简单,您必须发送writerow您要打印的内容列表。您当前的代码为它提供了两个元素:整数和列表。这就是你在输出线上得到的结果。

我认为您需要类似下面的代码。 test返回一个列表。您希望向writerow发送包含五个元素的列表,而不是将其添加为具有自己的四个元素的单个元素。列出t和这四个元素。我在下面简单地编写了它;一旦你了解它是如何工作的,你就可以将它折叠起来。

for t in range(5,8):
    line = [t]
    line.extend(test(t))
    # print line
    writer.writerow(line)

这会让你感动吗?