按列数据

时间:2016-04-17 18:19:29

标签: python parsing csv split

我想拆分" source.csv"文件基于它的内容。但当然,这不仅仅是简单的分裂,而是我需要满足一些规则"。

  1. 源文件和目标文件有一个固定的标题,不能正确编写csv。
  2. 根据其中一列中的特殊数据命名新文件(在我的示例中为" Fruit"列)
  3. 它需要独立于操作系统。
  4. source-csv文件可以包含大约500.000+行,至少有30多列。 (科学数据)因此,我不确定将整个数据保存在ram中是否合适,或者只是逐行读取文件并直接在大约500多个文件中进行排序,具体取决于"水果" -Column
  5. 这样的事情会很棒:

    源文件:source.csv

    Author: Somebody
    Date: Christmas
    Project-Title: 42
    Name, Fruit, Blubb, Drobblwubb
    Anton, Apple, 234, NewYork
    Bettina, Banana, 234, Chicago
    Carolin, Apple, 123, Berlin
    

    目标文件1:out / destination_apple.csv

    Author: Somebody
    Date: Christmas
    Project-Title: 42
    Name, Fruit, Blubb, Drobblwubb
    Anton, Apple, 234, NewYork
    Carolin, Apple, 123, Berlin
    

    目标文件2:out / destination_banana.csv

    Author: Somebody
    Date: Christmas
    Project-Title: 42
    Name, Fruit, Blubb, Drobblwubb
    Bettina, Banana, 234, Chicago
    

    我试验了很多,但是没有真正的" pythonic"甚至还在编写代码:/。

1 个答案:

答案 0 :(得分:2)

你有python pandas模块吗?它是一个很好的数据处理模块,非常适合您。这样的事情可以帮助你:

import pandas

csv = pandas.read_csv('test.csv', sep=',', header=3, skipinitialspace=True)
# header=3 because your header is on the third line
# skipinitialspace is set to True because your example data has spaces after commas
csv_apples = csv[csv['Fruit'] == 'Apple']
csv_bananas = csv[csv['Fruit'] == 'Banana']

csv_apples.to_csv('apples.csv', index=False, sep=',')
csv_bananas.to_csv('bananas.csv', index=False, sep=',')

此示例不会将原始csv的前3行写入生成的csv。你可以分别实现对csv的前三行的读取,并将其传递到to_csv函数header=yourheader