将数据从 .csv 文件转换为 .json - Python
Converting data from .csv file to .json - Python
我需要将数据从我的 csv
文件转换为我要使用的文件 .js
。
Lp.;Name;Surname;Desc;Unit;Comment
1;Jan;Makowski;Inf;km;
2;Anna;Nowak;Pts;km;Brak reakcji
如果你能看到第 'comment'
栏并不总是有记录,我需要保持这种状态。在数据之间还有我需要设置的标签数量。
我有一个文件,我正在处理,但它显示我的数据如下:
[{"Lp.;Name;Surname;Desc;Unit;Comment": "1;Jan;Makowski;Inf;km;"}, {"Lp.;Name;Surname;Desc;Unit;Comment": "2;Anna;Nowak;Pts;km;Brak reakcji"...]
我是 python 的新手,我不知道如何定义我需要得到的东西。
@@ 编辑我设法做到了...
import json
import csv
# Deklaracja danych
fieldnames = ("Lp.", "Name", "Surname", "Desc", "Unit", "Comment")
# Otwieranie plików
with open('file.csv', 'r', encoding = "utf8") as csvfile:
reader = csv.DictReader(csvfile) # ,fieldnames)
rows = list(reader)
# Zamykamy plik
csvfile.close()
# Tworzymy plik z danych
with open('file.json', 'w', encoding = "utf8") as jsonfile:
json.dump(rows,jsonfile)
# jsonfile.write(s.replace(';', '/t'))
# Zamykamy plik
csvfile.close()
一个非常快速的解决方案示例:
import csv
output = []
with open('your_file.csv', 'rb') as csvfile:
reader = csv.DictReader(csvfile)
output = [item for item in reader]
json.dump(open('your_file.json'), output)
我认为这就是你的答案,这可能不是最好的方法,但它可以给你结果。
import csv
import json
with open('file.csv', 'r') as f:
reader = csv.reader(f, delimiter=';')
data_list = list()
for row in reader:
data_list.append(row)
data = [dict(zip(data_list[0],row)) for row in data_list]
data.pop(0)
s = json.dumps(data)
print (s)
输出:
[{"Comment": "", "Surname": "Makowski", "Name": "Jan", "Lp.": "1", "Unit": "km", "Desc": "Inf"}, {"Comment": "Brak reakcji", "Surname": "Nowak", "Name": "Anna", "Lp.": "2", "Unit": "km", "Desc": "Pts"}]
Pandas 都内置了 .read_csv() and .to_json()。作为中间体,您将获得一个数据框,您可以使用它来操作数据,包括定义索引或数据模型。
import pandas as pd
df = pd.read_csv('file.csv')
# any operations on dataframe df
df.to_json('file.json')
与其编写脚本,不如尝试使用 csvjson 命令行工具(用 Python 编写):
http://csvkit.readthedocs.io/en/1.0.2/scripts/csvjson.html?highlight=csvjson
鉴于 python:
的一些细节,您可以大大减少脚本
import csv
import json
with open('file.csv', 'r', encoding='utf8') as csvfile:
with open('file.json', 'w', encoding='utf8') as jsonfile:
reader = csv.DictReader(csvfile, delimiter=';')
json.dump(list(reader), jsonfile)
有关其工作原理的详细信息:
- 当块为 "done" 时,作为 with 语句的一部分打开的文件将自动关闭。 (对应PEP:https://www.python.org/dev/peps/pep-0343/)
- 列表构造函数可以将迭代器(例如csv.DictReader)作为参数。 (DictReader 文档:https://docs.python.org/3.7/library/csv.html#csv.DictReader)
这将在内存中创建一个列表,其中包含 csv 文件中每一行的字典,如果您正在处理非常大的文件,可能值得记住这一点。遗憾的是,据我所知,在不修改迭代器或序列化器的情况下,无法将迭代器直接发送到 json 序列化器。
我将从维护和可读性的角度讨论哪种解决方案更好,作为 reader 的练习。
如果您不是从磁盘上的本地文件读取,而是通过标准输入从另一个程序读取,则不需要打开输入文件:
import csv
import json
import sys
with open('file.json', 'w', encoding='utf8') as jsonfile:
reader = csv.DictReader(sys.stdin, delimiter=';')
json.dump(list(reader), jsonfile)
通过 print()
或 json.dump(..., sys.stdout)
.
输出到标准输出也是如此
我需要将数据从我的 csv
文件转换为我要使用的文件 .js
。
Lp.;Name;Surname;Desc;Unit;Comment
1;Jan;Makowski;Inf;km;
2;Anna;Nowak;Pts;km;Brak reakcji
如果你能看到第 'comment'
栏并不总是有记录,我需要保持这种状态。在数据之间还有我需要设置的标签数量。
我有一个文件,我正在处理,但它显示我的数据如下:
[{"Lp.;Name;Surname;Desc;Unit;Comment": "1;Jan;Makowski;Inf;km;"}, {"Lp.;Name;Surname;Desc;Unit;Comment": "2;Anna;Nowak;Pts;km;Brak reakcji"...]
我是 python 的新手,我不知道如何定义我需要得到的东西。
@@ 编辑我设法做到了...
import json
import csv
# Deklaracja danych
fieldnames = ("Lp.", "Name", "Surname", "Desc", "Unit", "Comment")
# Otwieranie plików
with open('file.csv', 'r', encoding = "utf8") as csvfile:
reader = csv.DictReader(csvfile) # ,fieldnames)
rows = list(reader)
# Zamykamy plik
csvfile.close()
# Tworzymy plik z danych
with open('file.json', 'w', encoding = "utf8") as jsonfile:
json.dump(rows,jsonfile)
# jsonfile.write(s.replace(';', '/t'))
# Zamykamy plik
csvfile.close()
一个非常快速的解决方案示例:
import csv
output = []
with open('your_file.csv', 'rb') as csvfile:
reader = csv.DictReader(csvfile)
output = [item for item in reader]
json.dump(open('your_file.json'), output)
我认为这就是你的答案,这可能不是最好的方法,但它可以给你结果。
import csv
import json
with open('file.csv', 'r') as f:
reader = csv.reader(f, delimiter=';')
data_list = list()
for row in reader:
data_list.append(row)
data = [dict(zip(data_list[0],row)) for row in data_list]
data.pop(0)
s = json.dumps(data)
print (s)
输出:
[{"Comment": "", "Surname": "Makowski", "Name": "Jan", "Lp.": "1", "Unit": "km", "Desc": "Inf"}, {"Comment": "Brak reakcji", "Surname": "Nowak", "Name": "Anna", "Lp.": "2", "Unit": "km", "Desc": "Pts"}]
Pandas 都内置了 .read_csv() and .to_json()。作为中间体,您将获得一个数据框,您可以使用它来操作数据,包括定义索引或数据模型。
import pandas as pd
df = pd.read_csv('file.csv')
# any operations on dataframe df
df.to_json('file.json')
与其编写脚本,不如尝试使用 csvjson 命令行工具(用 Python 编写):
http://csvkit.readthedocs.io/en/1.0.2/scripts/csvjson.html?highlight=csvjson
鉴于 python:
的一些细节,您可以大大减少脚本import csv
import json
with open('file.csv', 'r', encoding='utf8') as csvfile:
with open('file.json', 'w', encoding='utf8') as jsonfile:
reader = csv.DictReader(csvfile, delimiter=';')
json.dump(list(reader), jsonfile)
有关其工作原理的详细信息:
- 当块为 "done" 时,作为 with 语句的一部分打开的文件将自动关闭。 (对应PEP:https://www.python.org/dev/peps/pep-0343/)
- 列表构造函数可以将迭代器(例如csv.DictReader)作为参数。 (DictReader 文档:https://docs.python.org/3.7/library/csv.html#csv.DictReader)
这将在内存中创建一个列表,其中包含 csv 文件中每一行的字典,如果您正在处理非常大的文件,可能值得记住这一点。遗憾的是,据我所知,在不修改迭代器或序列化器的情况下,无法将迭代器直接发送到 json 序列化器。
我将从维护和可读性的角度讨论哪种解决方案更好,作为 reader 的练习。
如果您不是从磁盘上的本地文件读取,而是通过标准输入从另一个程序读取,则不需要打开输入文件:
import csv
import json
import sys
with open('file.json', 'w', encoding='utf8') as jsonfile:
reader = csv.DictReader(sys.stdin, delimiter=';')
json.dump(list(reader), jsonfile)
通过 print()
或 json.dump(..., sys.stdout)
.