所以我试图读取一组文件并通过一个返回一组数字的函数运行它们。我需要用头写一个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的想法,但处理函数的输出似乎更容易处理,问题似乎有点不同。
有关如何解决此问题的任何建议或见解?
答案 0 :(得分:0)
很简单,您必须发送writerow
您要打印的内容列表。您当前的代码为它提供了两个元素:整数和列表。这就是你在输出线上得到的结果。
我认为您需要类似下面的代码。 test
返回一个列表。您希望向writerow
发送包含五个元素的列表,而不是将其添加为具有自己的四个元素的单个元素。列出t
和这四个元素。我在下面简单地编写了它;一旦你了解它是如何工作的,你就可以将它折叠起来。
for t in range(5,8):
line = [t]
line.extend(test(t))
# print line
writer.writerow(line)
这会让你感动吗?