【问题标题】:Create a dictionary from a csv file in python 3在 python 3 中从 csv 文件创建字典
【发布时间】:2013-11-18 06:10:27
【问题描述】:

我正在使用带有 Mac OS Maverick 的 Python 3.2,我正在尝试获取具有这种格式的 .cvs 文件:

'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'

到字典中,每行中的第一项是键,该行的其余部分是映射到该键的值。 我尝试了不同的方法,最接近的是这段代码,但不幸的是,我还没有:

   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 使用非标准引号字符、(可能是可选的)多余的初始空格等,您必须指定适当的 dialect parameters。但是您指定的唯一一个是已经使用默认值的那个,delimiter。请改用quotechar="'", skipinitialspace=True
  • result = {row[0]: row[1:] for row in reader}
  • 哇!那是快速和真棒!效果很好,谢谢!

标签: python csv dictionary


【解决方案1】:

试试:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您应该能够从输出中看出发生了什么。首先你这样做:

      for col in reader:
          print(col)
      

      由于 readerrows 的可迭代对象,因此会打印出 CSV 文件中的每一行。您将变量命名为 col 的事实没有任何作用,只会让读者感到困惑。

      如果有要特别处理的标题行,你应该这样做:

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

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 2016-02-27
        • 2016-09-03
        • 1970-01-01
        • 2016-11-20
        • 2011-10-08
        • 2012-12-15
        • 2012-01-02
        相关资源
        最近更新 更多