(抱歉,我还不能添加评论。)
[稍后编辑,以下语句是错误的!!!] “davesnitty 生成的行循环可以替换为rows = [[]] * 21
。” 这是错误的,因为这将创建空列表的列表,但空列表将是外部列表的所有元素共享的单个空列表。
我对使用标准 csv 模块的 +1。但是文件应该总是关闭的——尤其是当你打开那么多文件时。此外,还有一个错误。通过 -- 即使您只在此处写入结果,从文件中读取的行也是如此。解决方案实际上是缺失的。基本上,从文件中读取的行应该附加到与行号相关的子列表中。行号应通过 enumerate(reader) 获得,其中 reader 为 csv.reader(fin, ...)。
[稍后添加]尝试以下代码,为您的 puprose 修复路径:
import csv
import glob
import os
datapath = './data'
resultpath = './result'
if not os.path.isdir(resultpath):
os.makedirs(resultpath)
# Initialize the empty rows. It does not check how many rows are
# in the file.
rows = []
# Read data from the files to the above matrix.
for fname in glob.glob(os.path.join(datapath, '*.data')):
with open(fname, 'rb') as f:
reader = csv.reader(f)
for n, row in enumerate(reader):
if len(rows) < n+1:
rows.append([]) # add another row
rows[n].extend(row) # append the elements from the file
# Write the data from memory to the result file.
fname = os.path.join(resultpath, 'result.csv')
with open(fname, 'wb') as f:
writer = csv.writer(f)
for row in rows:
writer.writerow(row)