使用多个工作表创build多个Excel文件

我在表单中有一个主csv文件

col1, col2, col3, col4... a, x, y, z a, x, y, z b, x, y, z b, x, y, z .. .. .. .. 

并且我想读取这个文件。创build一个新的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() ,并使用条件来确定哪个文件应该被附加,或者我应该附加一个string的行,然后写每个文件的结尾。 还是有一个模块来优化这样的过程?

由于您将要处理大量的数据集,所以最好不要同时记住太多内存。 您可以维护由行前缀键入的打开文件字典,并确保使用contextlib.ExitStack正确closures文件。 这样做将允许您在处理input电子表格时懒洋洋地打开新文件:

 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) 

鉴于你想复制行input文件,我select不使用csv模块。 如果你想应用更复杂的处理,你当然可以考虑添加它。

我会build议尝试pandas这种东西。 写excel有一个特殊的function。 在这种情况下,想象一下,我将你的.csv文件读入一个pandas数据框df

 In [4]: df = pd.read_csv('yourfile.csv') In [5]: df Out[5]: col1 col2 col3 col4 0 axyz 1 axyz 2 bxyz 3 bxyz 

然后,我可以只select要过滤的值并保存为excel:

 In [6]: dfa = df[df['col1']=='a'] In [7]: dfa Out[7]: col1 col2 col3 col4 0 axyz 1 axyz In [8]: dfa.to_excel('OutputFilea.xls') 

第二个filter也是如此:

 In [9]: dfb = df[df['col1']=='b'] In [10]: dfb.to_excel('OutputFileb.xls') 

希望有所帮助。