【发布时间】:2014-09-12 12:41:19
【问题描述】:
我目前有 14 个 CSV 文件,每个文件包含一天的一列数据(14 个,因为它可以追溯到 2 周)
我想要做的是制作一个 CSV 文件,其中包含来自所有 14 个 CSV 的数据
例如。如果每个 CSV 都包含以下内容:
1
2
3
4
我希望结果是一个 csv 文件
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,
4,4,4,4,4,4,4,4,4,4,4,4,4,4,
(实际的 CSV 有 288 行)
我目前正在使用我在另一个问题中找到的一些代码,它适用于 2 或 3 个 CSV,但当我添加更多时,它并没有超过前 3 个,代码现在看起来非常混乱。
为大量代码道歉,但这是我目前所拥有的。
def csvappend():
with open('C:\dev\OTQtxt\\result1.csv', 'rb') as csv1:
with open('C:\dev\OTQtxt\\result2.csv', 'rb') as csv2:
with open('C:\dev\OTQtxt\\result3.csv', 'rb') as csv3:
with open('C:\dev\OTQtxt\\result4.csv', 'rb') as csv4:
with open('C:\dev\OTQtxt\\result5.csv', 'rb') as csv5:
with open('C:\dev\OTQtxt\\result6.csv', 'rb') as csv6:
with open('C:\dev\OTQtxt\\result7.csv', 'rb') as csv7:
with open('C:\dev\OTQtxt\\result8.csv', 'rb') as csv8:
with open('C:\dev\OTQtxt\\result9.csv', 'rb') as csv9:
with open('C:\dev\OTQtxt\\result10.csv', 'rb') as csv10:
with open('C:\dev\OTQtxt\\result11.csv', 'rb') as csv11:
with open('C:\dev\OTQtxt\\result12.csv', 'rb') as csv12:
with open('C:\dev\OTQtxt\\result13.csv', 'rb') as csv13:
with open('C:\dev\OTQtxt\\result14.csv', 'rb') as csv14:
reader1 = csv.reader(csv1, delimiter=',')
reader2 = csv.reader(csv2, delimiter=',')
reader3 = csv.reader(csv3, delimiter=',')
reader4 = csv.reader(csv4, delimiter=',')
reader5 = csv.reader(csv5, delimiter=',')
reader6 = csv.reader(csv6, delimiter=',')
reader7 = csv.reader(csv7, delimiter=',')
reader8 = csv.reader(csv8, delimiter=',')
reader9 = csv.reader(csv9, delimiter=',')
reader10 = csv.reader(csv10, delimiter=',')
reader11 = csv.reader(csv11, delimiter=',')
reader12 = csv.reader(csv12, delimiter=',')
reader13 = csv.reader(csv13, delimiter=',')
reader14 = csv.reader(csv14, delimiter=',')
all = []
for row1, row2, row3, row4, row5, row6, row7, row8, row9, \
row10, row11, row12, row13, row14 in zip(reader1, \
reader2, reader3,\
reader4, reader5, \
reader7, reader8,\
reader9, reader10, \
reader11, reader12,\
reader13,reader14):
row14.append(row1[0])
row14.append(row2[0])
row14.append(row3[0])
row14.append(row4[0])
row14.append(row5[0])
row14.append(row6[0])
row14.append(row7[0])
row14.append(row8[0])
row14.append(row9[0])
row14.append(row10[0])
row14.append(row11[0])
row14.append(row12[0])
row14.append(row13[0])
all.append(row14)
with open('C:\dev\OTQtxt\TODAY.csv', 'wb') as output:
writer = csv.writer(output, delimiter=',')
writer.writerows(all)
我认为我的一些缩进在复制时搞砸了,但你应该明白这一点。而且我不希望通读所有这些内容,它非常重复。
我看到一些类似/相关的问题推荐unix 工具。如果有人建议我最好告诉你这将在 Windows 上运行。
如果有人对我如何清理它并真正让它工作有任何想法。我将不胜感激!
【问题讨论】:
-
docs.python.org/2/reference/…
with有一个变体:with A() as a, B() as b ..,这可以杀死那些缩进。并将所有 csv* 放入某种列表中并对其进行迭代 -
好的,所以我可以使用
with变体来清理内容。你介意举一个迭代的例子吗?在for csv in csv_list:之后我不知道该怎么做