Python 使用多张图纸创建多个Excel文件
我有一个主csv文件的形式Python 使用多张图纸创建多个Excel文件,python,excel,csv,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
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()并使用条件来确定应该追加哪个文件,还是应该在行中追加一个字符串,然后在末尾写入每个文件。或者是否有一个模块可以优化这样的过程?因为您要处理大型数据集,所以最好不要同时在内存中保存太多。您可以维护由行前缀键入的打开文件的字典,并确保使用。执行此操作将允许您在处理输入电子表格时延迟打开新文件:
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)
考虑到您希望按原样将行复制到输出文件中,我选择不使用该模块。如果你想应用更复杂的处理,你当然应该考虑添加它。
因为你要使用大数据集,所以最好不要同时在内存中保存太多。您可以维护由行前缀键入的打开文件的字典,并确保使用。执行此操作将允许您在处理输入电子表格时延迟打开新文件:
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)
考虑到您希望按原样将行复制到输出文件中,我选择不使用该模块。如果你想应用更复杂的处理,你当然应该考虑把它添加进去。 < P>我建议尝试这种类型的东西。有一个特殊的函数可以写入excel。在本例中,假设我将您的.csv文件读入熊猫数据帧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')
希望能有帮助。我建议试试这种东西。有一个特殊的函数可以写入excel。在本例中,假设我将您的.csv文件读入熊猫数据帧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')
希望这能有所帮助。您认为哪种方法最好?听起来所有这些都是合理的方法,使得这纯粹是一个意见问题,事实上,你还没有真正尝试实现任何一种方法来解决任何具体问题…@MadPhysician我将在一个大数据集上实现它,不知道到时候这些方法是否会太慢或内存效率低下。这些实现几乎是微不足道的。在时间到来之前,你可以不费吹灰之力就把它们全部试出来。如果你有大量的数据集,很明显,将所有数据都保存在内存中并在最后写出不是一个好的选择。我将为你写一个带有一些优化的答案。你对哪种方法最好的标准是什么?听起来所有这些都是合理的方法,使得这纯粹是一个意见问题,事实上,你还没有真正尝试实现任何一种方法来解决任何具体问题…@MadPhysician我将在一个大数据集上实现它,不知道到时候这些方法是否会太慢或内存效率低下。这些实现几乎是微不足道的。在时间到来之前,你可以不费吹灰之力就把它们全部试出来。如果你有大量的数据集,很明显,将所有数据都保存在内存中并在最后写出不是一个好的选择。