python - 在python中将CSV转换为JSON文件
问题描述
我想逐行解析 CSV 文件并将其转换为 JSON 并通过 websocket 发送。
我在网上找到了一些将 CSV 转换为 JSON 的代码,如下所示:
import csv
import json
csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')
fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
for row in reader:
json.dump(row, jsonfile)
jsonfile.write('\n')
但是上面代码的问题是我们需要提到字段名称来解析 CSV。由于我有超过 2000 行,这不是一个可行的解决方案。
谁能建议如何在不指定字段名的情况下逐行解析 CSV 文件并将其转换为 JSON?
解决方案
Python CSV 转 JSON
要在 Python 中将 CSV 转换为 JSON,请执行以下步骤:
- 初始化一个 Python 列表。
csv.DictReader()
使用函数读取 CSV 文件的行。- 将每一行转换为字典。将字典添加到步骤 1 中创建的 Python 列表。
- 使用 . 将 Python 列表转换为 JSON 字符串
json.dumps()
。 - 您可以将 JSON 字符串写入 JSON 文件。
数据.csv
- 对于测试,我使用复制/粘贴在 csv 文件中制作了 100.000 行,整个转换使用Apple 的 M1 芯片大约需要半秒,而呈现的示例只需要 0.0005 秒。
column_1,column_2,column_3
value_1_1,value_1_2,value_1_3
value_2_1,value_2_2,value_2_3
value_3_1,value_3_2,value_3_3
Python程序
import csv
import json
import time
def csv_to_json(csvFilePath, jsonFilePath):
jsonArray = []
#read csv file
with open(csvFilePath, encoding='utf-8') as csvf:
#load csv file data using csv library's dictionary reader
csvReader = csv.DictReader(csvf)
#convert each csv row into python dict
for row in csvReader:
#add this python dict to json array
jsonArray.append(row)
#convert python jsonArray to JSON String and write to file
with open(jsonFilePath, 'w', encoding='utf-8') as jsonf:
jsonString = json.dumps(jsonArray, indent=4)
jsonf.write(jsonString)
csvFilePath = r'data.csv'
jsonFilePath = r'data.json'
start = time.perf_counter()
csv_to_json(csvFilePath, jsonFilePath)
finish = time.perf_counter()
print(f"Conversion 100.000 rows completed successfully in {finish - start:0.4f} seconds")
输出:data.json
Conversion 100.000 rows completed successfully in 0.5169 seconds
[
{
"column_1": "value_1_1",
"column_2": "value_1_2",
"column_3": "value_1_3"
},
{
"column_1": "value_2_1",
"column_2": "value_2_2",
"column_3": "value_2_3"
},
{
"column_1": "value_3_1",
"column_2": "value_3_2",
"column_3": "value_3_3"
}
]
推荐阅读
- hive - 向时间戳 Hive 添加分钟
- python - 如何多次重复 .index 搜索
- c - 32536 总线错误 ./program,由于我使用了 recv?
- c - 使用 for 循环检查数组中的元素以确保它们是正确的数据类型,但答案是打印太多次
- javascript - Firebase 函数
- mysql - 远程连接到 Linode mysql 服务器
- python - 如何将多个 csv 文件连接到 pandas 数据框中,文件名作为行名?
- javascript - 如何从这段代码开始使用 Javascript 找到这个方程的定积分?
- c# - 创建一个 Windows 服务来杀死从 IE 11 等 Web 浏览器登录的程序,该程序在 30 分钟后处于空闲或未使用状态
- python - 创建将通过指定的 python 虚拟环境运行的 .py 文件,同时通过指定的路径导入其他文件