import csv import json json_file = open('file.json', 'w+', encoding='utf-8') csv_file = open('1501.csv', 'r', encoding='utf-8') # 读取文件第一行不读取换行符作为json文件里每个数据的键值 keys = csv_file.readline().strip(' ').split(',') json_file.write('[ ') flag = 0
while csv_file.readline(): # 字符串列表转化为数字列表 values = csv_file.readline().strip(' ').split(',') values_temp = map(eval, values[0:2]) values_else = list(values_temp) values_else.append(values[2])
# 用zip()函数将两个列表形成映射关系,创建字典 dic_temp = dict(zip(keys, values_else))
# 将字典转化为字符串且带有缩进 # flag用于判断json文件中 "," 和换行的添加位置 json_str = json.dumps(dic_temp, indent=4)
if flag == 1: json_file.write(', ') json_file.write(json_str) flag = 1 json_file.write(']') csv_file.close() json_file.close()
代码解释:
1、while csv_file.readline:
循环读取csv文件的每一行,csv_flie为我的csv文件名字
2、字符串列表转换为数字列表
我的csv文件中一行数据有三个元素,项目要求数据格式为前两个元素为数字类型,第三个为字符串类型
3、用open()与readline()实现以行为单位读取文件时,读取出来的数据皆是字符串类型
json使用write()写文件时,必须先用dumps()将数据转换成字符串再存入。
4、关于flag
若是直接在存入每一行之后,write(', ')写入逗号和换行符则会发现,json的最后一行数据多出来一个逗号,删除很麻烦
所以,我直接用flag来进行判断。当写入第一行数据之后,在第二行数据写入之前,先写入逗号和换行符,则第二行数据会顺利写入
5、最重要的一点,我的两个文件都是放在同一个项目的同一个文件夹中,希望大家参考代码时,修改为自己的文件路径。其余内容请阅读代码中的注释。
json文件样式(部分):