【发布时间】:2015-09-04 09:19:57
【问题描述】:
我有一个 csv 文件集合,其名称类似于 2.csv、3.csv ....、999.csv。每个文件有 91 行。我想要一组新文件从所有文件中收集特定行。例如。 row1.csv 应该有所有 998 个文件的第一行,同样 row35.csv 应该有所有 998 个文件的第 35 行。因此,在我的脚本完成运行后,我总共应该有 91 个文件(每行一个),每个文件有 998 行(每个原始文件一个)。
我使用以下代码来完成任务
import glob
import os
for i in range(2,92):
outfile = open("row_%i.csv" %i,'w')
for filename in glob.glob('DataSet-MediaEval/devFeatures/*.csv'):
with open(filename, 'r') as infile:
lineno = 0
for line in infile:
lineno += 1
if lineno == i:
outfile.write(line)
outfile.close()
现在在任何 outfile row_i.csv 中,我的数据都按字典排序顺序排列。示例:
row_50.csv 文件中的第一行是10.csv 的第 50 行。
换句话说,在任何row_i.csv 中,行来自10.csv、100.csv、101.csv 等等。
我想知道为什么会发生这种情况,有没有一种方法可以确保我的 row_i.csv 以文件的顺序排列,即2.csv、3.csv 等等。
感谢您花时间阅读本文。
【问题讨论】:
-
可能
glob正在对文件名进行排序,这些文件名是字符串。只需将文件名缓存在列表中并自定义排序该列表。嗯,刚刚globed 了一些随机文件,它们以随机顺序出现。无论如何,您必须对文件名进行排序。 -
@PadraicCunningham 对于我希望添加的每个行号,我将遍历所有文件一次。看到最外面的 for 循环。行数从 2 -- 92
-
@tobias_k 我不会一次存储所有文件。我打开文件提取行并将其关闭。所以你的意思是我应该以某种方式将文件名存储在 outfile 中,然后根据文件名单独对每个 outfile 进行排序。
-
听起来你的意思是“目录”,而不是“字典”,顺序。对吗?
标签: python csv file-io export-to-csv