将.csv文件中的数据转换为.json - Python

时间:2017-05-22 11:40:29

标签: python json csv data-conversion format-conversion

我需要将我的csv文件中的数据转换为我要使用的.js文件。

Lp.;Name;Surname;Desc;Unit;Comment
1;Jan;Makowski;Inf;km;
2;Anna;Nowak;Pts;km;Brak reakcji

如果您可以看到列'comment'并不总是有记录,我需要保持这种方式。此外,在数据之间还需要设置大量标签。

enter image description here

我有一个文件,我现在正在处理但它显示的行数如下:

[{"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()

5 个答案:

答案 0 :(得分:3)

我认为这是你的答案,这可能不是最好的方法,但它可以为你提供结果。

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"}]

答案 1 :(得分:1)

Pandas内置.read_csv().to_json()。作为中间体,您将获得一个数据框,您可以使用该数据框来操作数据,包括定义索引或数据模型。

import pandas as pd
df = pd.read_csv('file.csv')
# any operations on dataframe df
df.to_json('file.json')

答案 2 :(得分:1)

您可以尝试csvjson命令行工具(用Python编写),而不是编写脚本:

http://csvkit.readthedocs.io/en/1.0.2/scripts/csvjson.html?highlight=csvjson

答案 3 :(得分:0)

一个非常快速的解决方案示例:

{{1}}

答案 4 :(得分:0)

鉴于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)

有关其工作原理的详细信息:

  1. 当“完成”该块时,作为with语句一部分打开的文件将自动关闭。 (相应的PEP:https://www.python.org/dev/peps/pep-0343/
  2. 列表构造函数可以将Iterators(例如csv.DictReader)作为参数。 (DictReader文档:https://docs.python.org/3.7/library/csv.html#csv.DictReader

这将在内存中创建一个列表,其中包含csv文件中每一行的字典,如果要处理非常大的文件,可能要记住这一点。不幸的是,据我所知,在不修改迭代器或序列化器的情况下,不可能直接将迭代器发送到json序列化器。

我将争论从维护和可读性的角度来看哪种解决方案更好,作为读者的练习。