如何使用 python 按日期拆分 csv 文件
How to split a csv file on date using python
我有一个 csv 文件,其中包含格式为“1929-01-10”的日期列。我想每年将这个巨大的文件拆分成单独的文件。因此,对于日期列中的每一年,都有一个单独的 csv 文件(最好带有年份名称)。
我想在 Python
- 获取我们必须写入新文件的 src 位置。和主 CSV 文件名
- 使用 CSV 模块 reader 并写入文件。
- 使用collection defaultdict模块设置每个键值类型都是list。
- Reader 主文件并迭代每一行。
- 将每行的第一列除以
-
以获得年份值。
- 使用年份值作为键并在结果字典中追加行。
- 现在我们将所有信息都放入了结果字典中。
- 迭代结果字典中的每个项目。
- 再次使用CSV模块写入CSV文件。
- 使用密钥作为文件名。
输入: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
我有一个 csv 文件,其中包含格式为“1929-01-10”的日期列。我想每年将这个巨大的文件拆分成单独的文件。因此,对于日期列中的每一年,都有一个单独的 csv 文件(最好带有年份名称)。
我想在 Python
- 获取我们必须写入新文件的 src 位置。和主 CSV 文件名
- 使用 CSV 模块 reader 并写入文件。
- 使用collection defaultdict模块设置每个键值类型都是list。
- Reader 主文件并迭代每一行。
- 将每行的第一列除以
-
以获得年份值。 - 使用年份值作为键并在结果字典中追加行。
- 现在我们将所有信息都放入了结果字典中。
- 迭代结果字典中的每个项目。
- 再次使用CSV模块写入CSV文件。
- 使用密钥作为文件名。
输入: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