【问题标题】:python-Create a csv by reading and processing filespython-通过读取和处理文件创建一个csv
【发布时间】:2017-05-09 23:22:59
【问题描述】:

所以我试图读取一组文件并通过一个返回一组数字的函数运行它们。我需要写一个带有标题的 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()function:

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

我不想使用字符串方法来编辑每一行,因为我将读取大量文件,从而使我的 csv 变得非常大,我知道这不是正确的方法。

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

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

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。您的帖子包含未定义的变量和至少一个语法错误。
  • 感谢反馈,问题其实可以总结一下。如何更改测试函数的输出,以便在编写 csv 时不打印字符串,而是打印实际序列(如果产生数字)?希望这会有所帮助。

标签: python python-2.7 csv


【解决方案1】:

非常简单,您必须向writerow 发送您想要打印的内容列表。您当前的代码给它两个元素:一个整数和一个列表。这就是你在输出行中得到的。

我想你想要下面的代码。 test 返回一个列表。您不想将其添加为具有四个元素的单个元素,而是希望向writerow 发送五个元素的列表。列出t 和这四个元素。我在下面非常简单地对其进行了编码;一旦你了解了它的工作原理,你就可以折叠它。

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

这会让你感动吗?

【讨论】:

  • 太棒了!有效。我会接受反馈以改进未来的问题。
猜你喜欢
  • 2020-02-06
  • 2014-09-15
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多