Python中的CSV转换为字典

2024-04-19 07:41:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似csv的文件,它想在Python中传输到dict中。示例文件如下:

file start:
...
...
[section-1] # basically a setup info with <key-value> pair
date,2/16/2018
label,test3
size,25
...
[section-2] # contains test parameters and data
NO,parameter1,parameter2
1,50,30
2,-20,32
...
...
file end

我大概有一个如何处理这个文件的想法,目标是方便地访问每个记录。像迪克特这样的人:

^{pr2}$

用例是我想提取这些数据并将其加载到数据库中。[section-1]数据将进入顶层表。并且[section-2]数据将根据[section-1]信息加载到子表中。在

我对Python很陌生。你认为这是转换这个文件的正确方向吗?有人能告诉我怎么做吗?在

谢谢


Tags: 文件csv数据keyinfo示例valuewith
3条回答

如果你愿意用熊猫,你可以这样做。我对这里的数据做了一些假设。我假设大小值等于csv文件中的行数。我假设你知道日期和你想用什么作为标签的名字。在

这段代码将获取csv文件中的行,并为每一行创建一个字典并将其放入一个列表中。在

import pandas as pd
my_dict = {"date": '06/01/2018', "label":"test3","size":0}
df = pd.read_csv('your_csv_file.csv')

row_list = []

for i, row in enumerate(df.values):
    my_dict['size']+=1
    row_dict = {}
    for i in range(0, len(row)):
        row_dict['col'+str(i)] = row[i]
    row_list.append(row_dict)

my_dict["data"] = row_list
print(my_dict)

要解析csv文件,您可能需要使用dataknead库。它只适用于python3。在

可以这样安装:pip install dataknead(如果有不同的Python版本,则为pip3)

根据文件城市.csv像这样:

city,country,population
Amsterdam,nl,850000
Rotterdam,nl,635000
Venice,it,265000

你可以这样读:

^{pr2}$

打印(数据)的输出将是:

[{'city': 'Amsterdam', 'population': '850000', 'country': 'nl'}, {'city': 'Rotterdam', 'population': '635000', 'country': 'nl'}, {'city': 'Venice', 'population': '265000', 'country': 'it'}]

我建议你先分析一个部分。然后您可以决定如何划分文件的部分。希望这有帮助。在

如果是我,我会使用^{}将文件解析为多个部分,然后使用generator function将结果行分别传递给这两个部分的^{}和{a4}。在

下面是一个例子:

from csv import reader, DictReader
from pprint import pprint 

def lines_until_section_mark(f):
    for line in f:
        if line.startswith('['):
            break
        if line.strip():
            yield line

with open('cfg.txt') as f:
    # Eat until first section mark
    for line in lines_until_section_mark(f):
        pass

    # Construct first dictionary from first sectoin
    d = dict(reader(lines_until_section_mark(f)))

    # Construct second dictionary from second section
    d['data'] = list(DictReader(lines_until_section_mark(f)))

pprint(d)

输入文件:

^{pr2}$

输出:

{'data': [{'NO': '1', 'parameter1': '50', 'parameter2': '30'},
          {'NO': '2', 'parameter1': '-20', 'parameter2': '32'}],
 'date': '2/16/2018',
 'label': 'test3',
 'size': '25'}

相关问题 更多 >