我有一个表格中的主 csv 文件
col1, col2, col3, col4...
a, x, y, z
a, x, y, z
b, x, y, z
b, x, y, z
.. .. .. ..
我想读入这个文件。创建一个新的 Excel 文件,所有值都在 col1==a 和另一个文件,所有值在 col1==b .所以 OutputFilea 看起来像:
col1, col2, col3, col4...
a, x, y, z
a, x, y, z
和OutputFileb看起来像
col1, col2, col3, col4...
b, x, y, z
b, x, y, z
我的问题是,我应该逐行使用 csv.reader() 并使用条件来确定应该附加哪个文件,还是应该附加一个带有行的字符串,然后将每个文件写入结束。或者是否有一个模块可以优化这样的流程?
最佳答案
由于您要处理大型数据集,因此最好不要同时在内存中保存太多数据。您可以维护一个由行前缀键入的打开文件的字典,并确保使用 contextlib.ExitStack
正确关闭文件。 .这样做将允许您在处理输入电子表格时延迟打开新文件:
from contextlib import ExitStack
output_files = {}
with open('master.csv', 'r') as master, ExitStack() as output_stack:
for line in master:
prefix = line.split(',', 1)[0]
if prefix not in output_files:
output_name = 'output' + prefix + '.csv'
output = output_stack.enter_context(open(output_name, 'w'))
output_files[prefix] = output
else:
output = output_files[prefix]
print(line, file=output)
鉴于您希望按原样将行复制到输出文件中,我选择不使用 csv
模块。如果你想应用更复杂的处理,你当然应该考虑添加它。
关于python - 使用多个工作表创建多个 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042064/