importcsvimportjson
json_file= open('file.json', 'w+', encoding='utf-8')
csv_file= open('1501.csv', 'r', encoding='utf-8')#读取文件第一行不读取换行符作为json文件里每个数据的键值
keys = csv_file.readline().strip('\n').split(',')
json_file.write('[\n')flag=0whilecsv_file.readline():#字符串列表转化为数字列表
values = csv_file.readline().strip('\n').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(',\n')
json_file.write(json_str)
flag= 1json_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(',\n')写入逗号和换行符则会发现,json的最后一行数据多出来一个逗号,删除很麻烦
所以,我直接用flag来进行判断。当写入第一行数据之后,在第二行数据写入之前,先写入逗号和换行符,则第二行数据会顺利写入
5、最重要的一点,我的两个文件都是放在同一个项目的同一个文件夹中,希望大家参考代码时,修改为自己的文件路径。其余内容请阅读代码中的注释。
json文件样式(部分):