如何将csv文件转换成json格式的文件?
How to convert a csv file into a json formatted file?
此处的大多数示例显示的是硬编码列,而不是迭代。我有 73 列要迭代并在 JSON.
中正确表达
import csv
import json
CSV_yearly = r'C:\path\yearly.csv'
JSON_yearly = r'C:\path\json_yearly.json'
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
for row in reader:
json_file.write(json.dumps(row) + ',' + '\n')
print "done"
虽然这会创建一个 json 文件,但它做错了。我看到 reader 中的参数请求列表的示例,但我不想从 csv 中输入 73 列。我的猜测是代码行位于 with
和 reader
之间。
您的代码将文件中的每一行创建为单独的 JSON 对象(有时称为 JsonL 或 json 行格式)。收集列表中的行,然后序列化为 JSON:
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
rows = list(reader)
json.dump(rows, json_file)
请注意,JSON 的一些消费者希望将对象而不是列表作为外部容器,在这种情况下,您的数据必须是
rows = {'data': list(reader)}
更新: - 来自评论的问题
- 你知道为什么结果没有相应地对我的列进行排序吗?
csv.DictReader
使用标准的 Python 字典来创建行,因此在 3.7 之前的 Python 版本中键的顺序是任意的。如果必须保留键顺序,请尝试使用 OrderedDict:
from collections import OrderedDict
out = []
with open('mycsv.csv', 'rb') as f:
reader = csv.reader(f)
headings = next(reader) # Assumes first row is headings, otherwise supply your own list
for row in reader:
od = OrderedDict(zip(headings, row))
out.append(od)
# dump out to file using json module
请注意,虽然这可能会输出 json 所需的密钥顺序,但 json 的消费者不需要遵守它。
- 你也知道为什么我在 json 中的值被转换成字符串而不是保留为数字或没有括号。
csv 中的所有值都被读取为字符串。如果您想要不同的类型,那么您需要在读取 csv 文件后执行必要的转换。
此处的大多数示例显示的是硬编码列,而不是迭代。我有 73 列要迭代并在 JSON.
中正确表达import csv
import json
CSV_yearly = r'C:\path\yearly.csv'
JSON_yearly = r'C:\path\json_yearly.json'
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
for row in reader:
json_file.write(json.dumps(row) + ',' + '\n')
print "done"
虽然这会创建一个 json 文件,但它做错了。我看到 reader 中的参数请求列表的示例,但我不想从 csv 中输入 73 列。我的猜测是代码行位于 with
和 reader
之间。
您的代码将文件中的每一行创建为单独的 JSON 对象(有时称为 JsonL 或 json 行格式)。收集列表中的行,然后序列化为 JSON:
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
rows = list(reader)
json.dump(rows, json_file)
请注意,JSON 的一些消费者希望将对象而不是列表作为外部容器,在这种情况下,您的数据必须是
rows = {'data': list(reader)}
更新: - 来自评论的问题
- 你知道为什么结果没有相应地对我的列进行排序吗?
csv.DictReader
使用标准的 Python 字典来创建行,因此在 3.7 之前的 Python 版本中键的顺序是任意的。如果必须保留键顺序,请尝试使用 OrderedDict:
from collections import OrderedDict
out = []
with open('mycsv.csv', 'rb') as f:
reader = csv.reader(f)
headings = next(reader) # Assumes first row is headings, otherwise supply your own list
for row in reader:
od = OrderedDict(zip(headings, row))
out.append(od)
# dump out to file using json module
请注意,虽然这可能会输出 json 所需的密钥顺序,但 json 的消费者不需要遵守它。
- 你也知道为什么我在 json 中的值被转换成字符串而不是保留为数字或没有括号。
csv 中的所有值都被读取为字符串。如果您想要不同的类型,那么您需要在读取 csv 文件后执行必要的转换。