在Python 3中从CSV文件创建字典

4

我正在使用Mac OS Maverick操作系统,使用Python 3.2版本。我想获取一个以以下格式为准的.csv文件:

'Lisa plowed ', '1A', 'field', 'field', 'field', 'field', 'field'
'John greased ', '1A', 'axle', 'wheel', 'wheels', 'wheel', 'engine'
'Tracy freed ', '1A', 'animals', 'fish', 'slaves', 'slaves', 'slaves'
'Paul alleged ', '1A', 'truth', 'crime', 'facts', 'infidelity', 'incident'

将每一行转化为字典,其中第一项为键(key),该行其余部分作为映射到该键的值(value)。 我尝试了不同的方法,最接近目标的是这段代码,但很遗憾,我还没有达成目标:
   import csv

   data =open('test.csv', encoding = 'utf=8')
   reader = csv.reader(data, delimiter=",")
   for col in reader:
       print(col)
   result = {}
   for row in reader:
       key = row[0]

       result[key] = row[1:]
   print(result)

我得到的结果就像字典为空一样只有{}。 无论是提供新的替代方案还是指引我找答案,都非常感激。 非常感谢!

顺便提一下,除非你想让列值为"'1A'"之类的内容,否则你没有正确解析它。如果你的CSV使用了非标准的引号字符,有(可能是可选的)多余的初始空格等等,你必须指定适当的方言参数。但你只指定了已经使用默认值的那个,即delimiter。尝试使用quotechar="'", skipinitialspace=True代替。 - abarnert
1
result = {row[0]: row[1:] for row in reader}结果 = {row[0]: row[1:] for row in reader} - Slater Victoroff
哇!太快了,太棒了!它运行得非常好,谢谢你! - user2962024
3个回答

8

尝试:

import csv

data={}
with open('/tmp/text.txt') as fin:
    reader=csv.reader(fin, skipinitialspace=True, quotechar="'")
    for row in reader:
        data[row[0]]=row[1:]

print(data)       
# {'Lisa plowed ': ['1A', 'field', 'field', 'field', 'field', 'field'], 'Tracy freed ': ['1A', 'animals', 'fish', 'slaves', 'slaves', 'slaves'], 'Paul alleged ': ['1A', 'truth', 'crime', 'facts', 'infidelity', 'incident'], 'John greased ': ['1A', 'axle', 'wheel', 'wheels', 'wheel', 'engine']}

3

第一次循环迭代reader后,它就是空的。


1

从输出结果中,您应该能够了解正在发生的情况。首先,您需要执行以下操作:

for col in reader:
    print(col)

由于reader是一个的可迭代对象,因此它会打印出CSV文件中的每一行。你将变量命名为col并没有任何影响,只会让读者感到困惑。

如果有一个标题行需要特殊处理,你应该这样做:

headers = next(reader)
for col in headers:
    print(col)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接