복붙노트

[PYTHON] csv 파일을 사전 목록으로 변환

PYTHON

csv 파일을 사전 목록으로 변환

나는 CSV 파일을 가지고있다.

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

이 CSV에서 사전 목록을 만들고 싶습니다.

다음과 같이 출력 :

a= [{'col1':1, 'col2':2, 'col3':3}, {'col1':4, 'col2':5, 'col3':6}]

어떻게해야합니까?

해결법

  1. ==============================

    1.csv.DictReader 사용 :

    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)]
    ...
    >>> a
    [{'col2': 2, 'col3': 3, 'col1': 1}, {'col2': 5, 'col3': 6, 'col1': 4}]
    
  2. ==============================

    2.csv 모듈 및 목록 이해 사용 :

    csv 모듈 및 목록 이해 사용 :

    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    
    

    산출:

    [{'col3': 3, 'col2': 2, 'col1': 1}, {'col3': 6, 'col2': 5, 'col1': 4}]
    
  3. ==============================

    3.또 다른 간단한 대답 :

    또 다른 간단한 대답 :

        import csv
        with open("configure_column_mapping_logic.csv", "r") as f:
            reader = csv.DictReader(f)
            a = list(reader)
            print a
    
  4. ==============================

    4.글쎄요, 다른 사람들이 똑똑한 방법으로 일하는 동안, 나는 그것을 순진하게 구현했습니다. 필자의 접근 방식은 외부 모듈을 필요로하지 않는 이점이 있지만, 아마도 이상한 구성의 값으로 실패 할 것입니다. 여기서는 참고 목적으로 만 사용됩니다.

    글쎄요, 다른 사람들이 똑똑한 방법으로 일하는 동안, 나는 그것을 순진하게 구현했습니다. 필자의 접근 방식은 외부 모듈을 필요로하지 않는 이점이 있지만, 아마도 이상한 구성의 값으로 실패 할 것입니다. 여기서는 참고 목적으로 만 사용됩니다.

    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))})
    
  5. ==============================

    5.

    # 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]
    
  6. ==============================

    6.사전 목록으로 CSV를 구문 분석하는 간단한 방법

    사전 목록으로 CSV를 구문 분석하는 간단한 방법

    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)
    
  7. ==============================

    7.CSV 파일 (2 열, 여러 행, 헤더 없음)을 사전 목록으로 변환하려면 CSV 모듈을 사용했습니다. 내 CSV 파일은 다음과 같습니다.

    CSV 파일 (2 열, 여러 행, 헤더 없음)을 사전 목록으로 변환하려면 CSV 모듈을 사용했습니다. 내 CSV 파일은 다음과 같습니다.

    c1,-------- 
    c14,EAE23ED3 
    c15,-------- 
    

    사전 목록 (키쌍, 값 쌍)으로 csv 파일의 각 행을 사전으로 만들고 싶습니다. 내가 원하는 출력은 다음과 같습니다.

    [
    {
        "c1": "--------"
    }, 
    {
        "c14": "EAE23ED3"
    }, 
    {
        "c15": "--------"
    }
    ]
    

    이렇게하려면 아래 코드를 사용했습니다.

    import csv
    
    csv_path = '.../input_file.csv'
    
    mylist = []
    mydict = {}
    
    # read the csv and write to a dictionary
    with open(csv_path, 'rb') as csv_file:
        reader = csv.reader(csv_file)
        for row in reader:
            mydict = {row[0]:row[1]}
            mylist.append(mydict)
    
    print(mylist)
    

    내 경우 엔 효과가있어. 내 문제를 해결하기 위해 다음 게시물이 도움이되었습니다.

  8. from https://stackoverflow.com/questions/21572175/convert-csv-file-to-list-of-dictionaries by cc-by-sa and MIT license