繁体   English   中英

python将带有行和列标题的csv文件读入带有两个键的字典中

[英]python read csv file with row and column headers into dictionary with two keys

我有以下格式的csv文件,

,col1,col2,col3
row1,23,42,77
row2,25,39,87
row3,48,67,53
row4,14,48,66

我需要把它读成两个键的字典,这样

dict1['row1']['col2'] = 42
dict1['row4']['col3'] = 66

如果我尝试使用csv.DictReader和默认选项

with open(filePath, "rb" ) as theFile:
    reader = csv.DictReader(theFile, delimiter=',')
    for line in reader:
    print line

我得到以下输出

{'': 'row1', 'col2': '42', 'col3': '77', 'col1': '23'}
{'': 'row2', 'col2': '39', 'col3': '87', 'col1': '25'}
{'': 'row3', 'col2': '67', 'col3': '53', 'col1': '48'}
{'': 'row4', 'col2': '48', 'col3': '66', 'col1': '14'}

我不知道如何处理这个输出来创建我感兴趣的字典类型。

为了完整起见,如果你能解决如何将字典写回到具有上述格式的csv文件中,它也会有所帮助

使用CSV模块:

import csv
dict1 = {}

with open("test.csv", "rb") as infile:
    reader = csv.reader(infile)
    headers = next(reader)[1:]
    for row in reader:
        dict1[row[0]] = {key: int(value) for key, value in zip(headers, row[1:])}

你可以使用pandas ,即使它有点矫枉过正。 专家认为,几乎没有任何代码可以获得预期的结果。

# Reading the file
df = pd.read_csv('tmp.csv', index_col=0)

# Creating the dict
d = df.transpose().to_dict(orient='series')

print(d['row1']['col2'])
42

使用csv模块解析输入文件的格式并不方便。 我想单独解析头,然后解析一行其余线,通过拆分, ,剥离和沿途使字典。 工作代码:

from pprint import pprint

d = {}
with open("myfile.csv") as f:
    headers = [header.strip() for header in next(f).split(",")[1:]]

    for line in f:
        values = [value.strip() for value in line.split(",")]
        d[values[0]] = dict(zip(headers, values[1:]))

pprint(d)

打印:

{'row1': {'col1': '23', 'col2': '42', 'col3': '77'},
 'row2': {'col1': '25', 'col2': '39', 'col3': '87'},
 'row3': {'col1': '48', 'col2': '67', 'col3': '53'},
 'row4': {'col1': '14', 'col2': '48', 'col3': '66'}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM