如何使用python在日期拆分csv文件

时间:2015-02-19 14:47:56

标签: python csv split

我有一个csv文件,其中包含格式为" 1929-01-10"的日期列。我想每年将这个巨大的文件拆分成单独的文件。因此,对于日期列中的每一年,单独的csv文件(理想情况下具有年份的名称)。

我想在Python中做到这一点

1 个答案:

答案 0 :(得分:5)

  1. 获取我们必须编写新文件的src位置。和主CSV文件名
  2. 使用CSV模块读取和写入文件。
  3. 使用集合defaultdict模块将每个键值类型设置为list。
  4. Reader主文件并迭代每一行。
  5. 按行-拆分每行的第一列以获取年份值。
  6. 使用年份值作为键,并在结果词典中附加行。
  7. 现在我们将所有信息都包含在结果词典中。
  8. 从结果字典中迭代每个项目。
  9. 再次使用CSV模块写入CSV文件。
  10. 使用密钥作为文件名。
  11. 输入:main.csv

    1929-01-10,1,a
    1929-01-10,2,b
    1930-01-10,3,c
    1929-01-10,4,d
    2015-01-10,5,e
    2015-01-10,6,f
    1929-01-10,7,g
    2014-01-10,8,h
    

    代码:

    src_path = "/home/vivek/Desktop/Work/stack/"
    main_file = "/home/vivek/Desktop/Work/stack/main.csv"
    import csv
    import collections
    import pprint
    
    with open(main_file, "rb") as fp:
        root = csv.reader(fp, delimiter=',')
        result = collections.defaultdict(list)
        for row in root:
            year = row[0].split("-")[0]
            result[year].append(row)
    
    print "Result:-"        
    pprint.pprint(result)
    
    for i,j in result.items():
        file_path = "%s%s.csv"%(src_path, i)
        with open(file_path, 'wb') as fp:
            writer = csv.writer(fp, delimiter=',')
            writer.writerows(j)
    

    输出:

    Result:-
    defaultdict(<type 'list'>, {'2015': [['2015-01-10', '5', 'e'], ['2015-01-10', '6', 'f']], '1929': [['1929-01-10', '1', 'a'], ['1929-01-10', '2', 'b'], ['1929-01-10', '4', 'd'], ['1929-01-10', '7', 'g']], '1930': [['1930-01-10', '3', 'c']], '2014': [['2014-01-10', '8', 'h']]})
    

    根据输入文件的一些结果文件:

    1929.csv

    1929-01-10,1,a
    1929-01-10,2,b
    1929-01-10,4,d
    1929-01-10,7,g
    

    2015.csv

    2015-01-10,5,e
    2015-01-10,6,f