convert csv file to list of dictionaries

前端 未结 6 1343
我寻月下人不归
我寻月下人不归 2020-12-04 19:01

I have a csv file

col1, col2, col3
1, 2, 3
4, 5, 6

I want to create a list of dictionary from this csv.

output as :



        
相关标签:
6条回答
  • 2020-12-04 19:36
    # similar solution via namedtuple:    
    
    import csv
    from collections import namedtuple
    
    with open('foo.csv') as f:
      fh = csv.reader(open(f, "rU"), delimiter=',', dialect=csv.excel_tab)
      headers = fh.next()
      Row = namedtuple('Row', headers)
      list_of_dicts = [Row._make(i)._asdict() for i in fh]
    
    0 讨论(0)
  • 2020-12-04 19:42

    Using the csv module and a list comprehension:

    import csv
    with open('foo.csv') as f:
        reader = csv.reader(f, skipinitialspace=True)
        header = next(reader)
        a = [dict(zip(header, map(int, row))) for row in reader]
    print a    
    

    Output:

    [{'col3': 3, 'col2': 2, 'col1': 1}, {'col3': 6, 'col2': 5, 'col1': 4}]
    
    0 讨论(0)
  • 2020-12-04 19:58

    Use csv.DictReader:

    import csv
    
    with open('test.csv') as f:
        a = [{k: int(v) for k, v in row.items()}
            for row in csv.DictReader(f, skipinitialspace=True)]
    

    Will result in :

    [{'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}]
    
    0 讨论(0)
  • 2020-12-04 19:59

    Another simpler answer:

        import csv
        with open("configure_column_mapping_logic.csv", "r") as f:
            reader = csv.DictReader(f)
            a = list(reader)
            print a
    
    0 讨论(0)
  • 2020-12-04 20:00

    Simple method to parse CSV into list of dictionaries

    with open('/home/mitul/Desktop/OPENEBS/test.csv', 'rb') as infile:
      header = infile.readline().split(",")
      for line in infile:
        fields = line.split(",")
        entry = {}
        for i,value in enumerate(fields):
          entry[header[i].strip()] = value.strip()
          data.append(entry)
    
    0 讨论(0)
  • 2020-12-04 20:01

    Well, while other people were out doing it the smart way, I implemented it naively. I suppose my approach has the benefit of not needing any external modules, although it will probably fail with weird configurations of values. Here it is just for reference:

    a = []
    with open("csv.txt") as myfile:
        firstline = True
        for line in myfile:
            if firstline:
                mykeys = "".join(line.split()).split(',')
                firstline = False
            else:
                values = "".join(line.split()).split(',')
                a.append({mykeys[n]:values[n] for n in range(0,len(mykeys))})
    
    0 讨论(0)
提交回复
热议问题