Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多张图纸创建多个Excel文件_Python_Excel_Csv - Fatal编程技术网

Python 使用多张图纸创建多个Excel文件

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

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

因为您要处理大型数据集,所以最好不要同时在内存中保存太多。您可以维护由行前缀键入的打开文件的字典,并确保使用。执行此操作将允许您在处理输入电子表格时延迟打开新文件:

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我将在一个大数据集上实现它,不知道到时候这些方法是否会太慢或内存效率低下。这些实现几乎是微不足道的。在时间到来之前,你可以不费吹灰之力就把它们全部试出来。如果你有大量的数据集,很明显,将所有数据都保存在内存中并在最后写出不是一个好的选择。