【问题标题】:Best way to convert csv data to dict将csv数据转换为dict的最佳方法
【发布时间】:2011-01-24 04:01:03
【问题描述】:

我有包含以下数据的 csv 文件

val1,val2,val3
1,2,3
22,23,33

那么如何将数据转换成dict

dict1 = { 'val1': 1, 'val2': 2, 'val3': 3}
dict2 = { 'val1': 22, 'val2': 23, 'val3': 33}
fp = open('file.csv', 'r')
reader = csv.reader(fp)
for row in reader:
    ????

谢谢

【问题讨论】:

    标签: python csv


    【解决方案1】:

    使用此代码根据您的问题将您的 csv 转换为字典

    import csv
    with open('data.csv') as file:
        for i in csv.DictReader(file):
            print (dict(i))
    

    【讨论】:

      【解决方案2】:

      我经常想在操作 CSV 时升级到 pandas。它为您提供了一个全新的可能性世界。

      import pandas as pd
      df=pd.read_csv('test.csv')
      for index, row in df.iterrows():
          d=row.to_dict()
          print(d)
      
      print("")
      
      print( df[df.val3>10].iloc[0].to_dict() )
      print( list(df[['val3']]['val3']) )
      

      输出:

      {'val1': 1, 'val2': 2, 'val3': 3}
      {'val1': 22, 'val2': 23, 'val3': 33}
      
      {'val1': 22, 'val2': 23, 'val3': 33}
      [3, 33]
      

      【讨论】:

      • 我在处理 CSV 时也喜欢 pandas。它将整个 CSV 作为一个 dict 提供给您,而不是作为一个可迭代的。
      【解决方案3】:

      这里的其他答案中提到的使用“csv”很酷的一点是,它可以用于读取文件(明显的用例),还可以解析常规的 csv 格式字符串。

      读取 csv 文件的示例:

      import csv
      with open('my_file.csv') as f:
         for line in csv.DictReader(f, fieldnames=('val1', 'val2', 'val3')):
            print(line)
      

      请注意,您可以显式传递您希望作为键的标头,这使得使用没有标头的 csv 文件变得非常容易。

      另一个用例是读取带有 'csv' 的常规字符串

      例子:

      import csv
      my_csv_string = 'val1, val2, val3'
      my_csv_dict = next(csv.DictReader(StringIO(s), fieldnames=('key1', 'key2', 'key3')))
      

      不管怎样,csv.DictReader() 就是你所需要的..

      【讨论】:

        【解决方案4】:

        使用csv.DictReader:

        创建一个像普通阅读器一样操作的对象,但将读取的信息映射到一个字典,其键由可选的 fieldnames 参数给出。 fieldnames 参数是一个sequence,其元素按顺序与输入数据的字段相关联。这些元素成为结果字典的键。如果省略 fieldnames 参数,则 csvfile 第一行中的值将用作 fieldnames。如果读取的行的字段多于字段名序列,则将剩余数据添加为由 restkey 的值作为键的序列。如果读取的行的字段少于字段名序列,则其余键采用可选 restval 参数的值。任何其他可选或关键字参数都将传递给底层 reader 实例...

        【讨论】:

          【解决方案5】:
          import csv
          
          reader = csv.DictReader(open('myfile.csv'))
          for row in reader:
              # profit !
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-28
            • 2021-11-15
            • 2022-12-07
            • 2018-03-13
            • 2023-01-24
            • 2017-05-24
            • 2020-02-09
            相关资源
            最近更新 更多