如何基于CSV-fi创建字典

2024-05-26 17:43:39 发布

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

我有一个csv文件,格式如下:

#ID #Number #Date #Name #Email
1978 26   24/4/10 Jim  Jim@randomemail.com
1328 31   22/7/10 Jim  Kim@randomemail.com
1908 26   21/4/10 Jim  Dim@randomemail.com
1918 26   29/4/10 Jim  Rim@randomemail.com
1938 46   24/4/10 Jim  Lim@randomemail.com

我已经打开csv文件并打印出来了。你知道吗

我现在想把它做成一本字典,比如: [ID:1978,编号:26,日期:2010年4月24日,姓名:Jim,电子邮件: 邮箱:Jim@random.com],[etc],[etc]

我知道这可能很容易,但我是新来的,已经被困了几个小时。你知道吗


Tags: 文件csvnamecomidnumberdateemail
3条回答

在我的评论之后,请考虑以下内容:

import csv
with open('file.txt', 'r') as f:
    reader = csv.DictReader(f, delimiter=' ', skipinitialspace=True)
    for row in reader:
        print(row)

输出:

OrderedDict([('#ID', '1978'), ('#Number', '26'), ('#Date', '24/4/10'), ('#Name', 'Jim'), ('#Email', 'Jim@randomemail.com')])
OrderedDict([('#ID', '1328'), ('#Number', '31'), ('#Date', '22/7/10'), ('#Name', 'Jim'), ('#Email', 'Kim@randomemail.com')])
OrderedDict([('#ID', '1908'), ('#Number', '26'), ('#Date', '21/4/10'), ('#Name', 'Jim'), ('#Email', 'Dim@randomemail.com')])
OrderedDict([('#ID', '1918'), ('#Number', '26'), ('#Date', '29/4/10'), ('#Name', 'Jim'), ('#Email', 'Rim@randomemail.com')])
OrderedDict([('#ID', '1938'), ('#Number', '46'), ('#Date', '24/4/10'), ('#Name', 'Jim'), ('#Email', 'Lim@randomemail.com')])

DictReader的两个额外参数是正确解析变量空间分隔文件所必需的。你知道吗

或者,如果要同时显示所有行,则可以执行以下操作:

import csv
with open('file.txt', 'r') as f:
    reader = csv.DictReader(f, delimiter=' ', skipinitialspace=True)
    rows = list(reader)

print(rows)

产生

[
    OrderedDict([('#ID', '1978'), ('#Number', '26'), ('#Date', '24/4/10'), ('#Name', 'Jim'), ('#Email', 'Jim@randomemail.com')]), 
    OrderedDict([('#ID', '1328'), ('#Number', '31'), ('#Date', '22/7/10'), ('#Name', 'Jim'), ('#Email', 'Kim@randomemail.com')]), 
    OrderedDict([('#ID', '1908'), ('#Number', '26'), ('#Date', '21/4/10'), ('#Name', 'Jim'), ('#Email', 'Dim@randomemail.com')]), 
    OrderedDict([('#ID', '1918'), ('#Number', '26'), ('#Date', '29/4/10'), ('#Name', 'Jim'), ('#Email', 'Rim@randomemail.com')]), 
    OrderedDict([('#ID', '1938'), ('#Number', '46'), ('#Date', '24/4/10'), ('#Name', 'Jim'), ('#Email', 'Lim@randomemail.com')])
]

而且

print(rows[0]["#Email"])

产生

Jim@randomemail.com

更新

如果文件实际上是制表符分隔的,则可以使用:

reader = csv.DictReader(f, delimiter='\t')

您应该能够通过打印行(正如您已经拥有的那样)来判断分隔符是什么,但是将它包装在一个repr调用中,比如print(repr(line))。如果您在输出中看到一个\t,它是以制表符分隔的。你知道吗

下面是一些用纯python编写的代码:

for line in file_contents_2:
    line_contents = line.strip().split(",") # Removes the \n,
    # then turns the line into a list, where each value is seperated
    # by the comma      
    the_dictionary = {}
    reference = ["ORIN","DEST","HORIZ","BEAR"]
    for i in range(4): # iterates i=0 to i=3
        # Arrays start at 0, so a=[1,2,3]; a[1] would return 2
        the_dictionary[reference[i]] = line_contents[i]
    dictionary_list.append(the_dictionary)

使用熊猫会让你的生活更轻松:

import pandas as pd
df = pd.read_csv('path_to_your_csv')
your_dict = df.to_dict()

就是这样,在to_dict中有一些可选参数可以帮助您按照您想要的方式格式化它。你知道吗

相关问题 更多 >

    热门问题