使用多个表创建多个Excel文件

时间:2017-07-11 18:27:00

标签: python excel csv

我有一个主要的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()并使用条件来确定应该追加哪个文件,或者我应该追加带有行的字符串然后写入每个文件结束。或者是否有一个模块来优化这样的过程?

2 个答案:

答案 0 :(得分:3)

由于您将使用大型数据集,因此最好不要同时在内存中保留太多内容。您可以维护由行前缀键入的打开文件的字典,并确保使用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模块。如果您想应用更复杂的处理,您当然应该考虑添加它。

答案 1 :(得分:2)

我建议尝试pandas这类东西。有一个特殊的功能可以写入excel。在这种情况下,想象一下我将.csv文件读入pandas数据帧df

In [4]: df = pd.read_csv('yourfile.csv')

In [5]: df
Out[5]: 
  col1   col2   col3   col4
0    a      x      y      z
1    a      x      y      z
2    b      x      y      z
3    b      x      y      z

然后我只能选择我要过滤的值并保存到excel:

In [6]: dfa = df[df['col1']=='a']

In [7]: dfa
Out[7]: 
  col1   col2   col3   col4
0    a      x      y      z
1    a      x      y      z

In [8]: dfa.to_excel('OutputFilea.xls')

第二个过滤器也是如此:

In [9]: dfb = df[df['col1']=='b']

In [10]: dfb.to_excel('OutputFileb.xls')

希望有所帮助。