5/5 - (1票)
将CSV文件转换为JSON文件的5个简单步骤
你可以通过以下五个步骤将CSV文件转换为JSON文件。
- 导入
csv和json库 - 在阅读模式下使用
[open(path_to_csv, 'r')](https://blog.finxter.com/python-open-function/)函数在上下文管理器(=with环境)中打开CSV作为文件对象。 - 使用
csv.DictReader(fobj)将CSV内容加载到Python中,并传递刚刚创建的文件对象。 - 遍历每个
row,并使用其中一列值作为键更新新创建的字典my_json。my_json[key] = row - 使用函数将
my_json字典数据存储在一个JSON文件中。[json.dumps(my_json)](https://blog.finxter.com/how-to-serialize-a-python-dict-into-a-string-and-back/)函数存储在一个JSON文件中。
下面是一个将CSV文件'my_file.csv' 转换为JSON文件'my_file.json' 的代码例子。
import csv
import json
csv_file = 'my_file.csv'
json_file = 'my_file.json'
my_json = {}
with open(csv_file, 'r') as fobj:
reader = csv.DictReader(fobj)
for row in reader:
# Use one of the CSV column names as a key
key = row['Name']
my_json[key] = row
with open(json_file,'w') as fobj:
fobj.write(json.dumps(my_json, indent=2))
注意,你应该使用CSV中的一个列作为键。在这个例子中,我们使用了CSV文件中的列'Name'。在你的情况下,你将需要使用你自己的列头。
输入CSV文件。
Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000
输出JSON文件。
{
"Alice": {
"Name": "Alice",
"Job": "Programmer",
"Age": "23",
"Income": "110000"
},
"Bob": {
"Name": "Bob",
"Job": "Executive",
"Age": "34",
"Income": "90000"
},
"Carl": {
"Name": "Carl",
"Job": "Sales",
"Age": "45",
"Income": "50000"
}
}
你可以在我们的交互式Jupyter笔记本中自己尝试,这里。
Python将CSV文件转换为带有列头的JSON文件
之前介绍的csv.DictReader() 方法假定CSV中的第一行是标题。因此,第一行被用作CSV的页眉--例如,使用row['Name'] ,访问列'Name' 的特定行键。
Python将CSV转换为JSON,不含页眉
之前介绍的csv.DictReader() 方法假定CSV中的第一行是头。
如果你的CSV文件在第一行没有任何头信息,你可以用 **fieldnames**``csv.DictReader() 方法的参数,该方法接收一连串的列标(字符串)。
下面是DictReader() 方法的语法。
class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
"fieldnames "参数是一个序列。如果省略了fieldnames ,文件f 的第一行的值将被用作fieldnames 。" -文档
下面的代码片断显示了如何通过设置自定义列(标题)字符串作为列表 ['XXX', 'YYY', 'ZZZ', '---'] ,将相同的没有标题的CSV转换为JSON文件。
import csv
import json
csv_file = 'my_file.csv'
json_file = 'my_file.json'
my_json = {}
with open(csv_file, 'r') as fobj:
reader = csv.DictReader(fobj, fieldnames=['XXX', 'YYY', 'ZZZ', '---'])
for row in reader:
key = row['---']
my_json[key] = row
with open(json_file,'w') as fobj:
fobj.write(json.dumps(my_json, indent=2))
下面是输入和输出的文件。
输入CSV文件。
Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000
输出JSON文件。
{
"Income": {
"XXX": "Name",
"YYY": "Job",
"ZZZ": "Age",
"---": "Income"
},
"110000": {
"XXX": "Alice",
"YYY": "Programmer",
"ZZZ": "23",
"---": "110000"
},
"90000": {
"XXX": "Bob",
"YYY": "Executive",
"ZZZ": "34",
"---": "90000"
},
"50000": {
"XXX": "Carl",
"YYY": "Sales",
"ZZZ": "45",
"---": "50000"
}
}
或者,作为一个屏幕截图。
你可以看到,现在第一行被用作正常的CSV输入行,而不是像前面的例子那样,在没有指定DictReader() 方法的fieldnames 参数的情况下被用作标题。
Python将CSV转换为JSON Pandas
该 [pandas.to_json()](https://blog.finxter.com/pandas-dataframe-to_json-method/)方法将一个DataFrame对象转换为JSON字符串。
这个方法的语法如下。
# Syntax to_json()
DataFrame.to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=True, indent=None, storage_options=None)
下面的例子将countries.csv 文件读入一个DataFrame。然后这个DataFrame转换为JSON。
df = pd.read_csv('countries.csv').head()
result = df.to_json(indent=4, orient='records', lines=True)
print(result)
- 第[1]行读入
countries.csv文件的前五(5)行(头部)。输出保存到一个DataFrame (df)。 - 第[2]行做了以下工作。
- 将DataFrame转换为JSON格式
- 通过将每条记录从左边缩进四(4)个空格来格式化输出
- 将方向参数设置为记录,将行设置为
True(见上述定义)。 - 将输出保存到
result。
- 第[3]行将结果输出到终端。
输出 -result
{"Country":"Germany","Capital":"Berlin","Population":83783942,"Area":357021} |
{"Country":"France","Capital":"Paris","Population":67081000,"Area":551695} |
{"Country":"Spain","Capital":"Madrid","Population":47431256,"Area":498511} |
{"Country":"Italy","Capital":"Rome","Population":60317116,"Area":301338} |
{"Country":"Poland","Capital":"Warsaw","Population":38383000,"Area":312685} |
Pheww!让我们以更有趣的方式来结束这篇文章吧!
程序员的幽默
Q: How do you tell an introverted computer scientist from an extroverted computer scientist?
A: An extroverted computer scientist looks at your shoes when he talks to you.
何去何从?
足够的理论。让我们进行一些实践吧!
编码员获得六位数以上的报酬,因为他们可以利用机器智能和自动化更有效地解决问题。
要想在编码方面获得更大的成功,就要为真实的人解决更多的真实问题。这样才能在实践中打磨出你真正需要的技能。毕竟,学习没有人需要的理论有什么用?
你通过在实际的编码项目上工作来建立高价值的编码技能!
你想停止用玩具项目学习,而专注于为你赚钱和为人们解决实际问题的实用代码项目吗?
如果你的答案是 是的!,请考虑成为一名Python自由开发者!这是接近提高Python技能任务的最好方式--即使你是一个完全的初学者。
如果你只是想了解自由职业的机会,请随时观看我的免费网络研讨会"如何建立你的高收入技能Python",了解我如何在网上发展我的编码业务,以及你如何也能做到--从你自己的家里就可以。