【问题标题】:How to split a csv file on date using python如何使用python在日期上拆分csv文件
【发布时间】:2015-02-19 14:47:56
【问题描述】:

我有一个 csv 文件,其中包含格式为“1929-01-10”的日期列。我想每年将这个巨大的文件分成单独的文件。因此,对于日期列中的每一年,都有一个单独的 csv 文件(最好使用年份名称)。

我想用 Python 来做这个

【问题讨论】:

  • 你能给我们举一个你到目前为止尝试过的代码的例子吗?
  • 所以您想将主文件中的内容拆分到其各自的年份 csv 文件中??
  • 请给出几行 cvs 示例

标签: python csv split


【解决方案1】:
  1. 获取我们必须写入新文件的 src 位置。和主 CSV 文件名
  2. 使用 CSV 模块读写文件。
  3. 使用集合 defaultdict 模块设置每个键值类型为列表。
  4. 读取主文件并从中迭代每一行。
  5. 将每一行的第一列除以- 以获得年份值。
  6. 使用年份值作为键并在结果字典中追加行。
  7. 现在我们将所有信息都放入结果字典中。
  8. 迭代结果字典中的每一项。
  9. 再次使用 CSV 模块写入 CSV 文件。
  10. 使用密钥作为文件名。

输入: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

【讨论】:

  • @Melvin Wevers:对你有帮助吗?如果您在上面的代码中有任何困难,那么我可以随时通过电子邮件 vivekbsable@gmail.com 联系到我,我的 Skype id:vivek.igp
  • 非常有用的代码!!只是一个小小的好奇。当文件的大小非常大时,拆分 CSV 的方法是什么。即,当键“1929”的列表大小用尽时,方法是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2023-03-08
  • 2019-02-03
  • 2013-11-30
  • 2021-01-26
相关资源
最近更新 更多