[python] CSV 파일에서 사전을 작성 하시겠습니까?

CSV 파일에서 사전을 만들려고합니다. csv 파일의 첫 번째 열은 고유 키를 포함하고 두 번째 열은 값을 포함합니다. csv 파일의 각 행은 사전 내의 고유 키, 값 쌍을 나타냅니다. csv.DictReaderand csv.DictWriter클래스 를 사용하려고 시도했지만 각 행에 대해 새 사전을 생성하는 방법 만 알아낼 수있었습니다. 하나의 사전을 원합니다. 사용하려는 코드는 다음과 같습니다.

import csv

with open('coors.csv', mode='r') as infile:
    reader = csv.reader(infile)
    with open('coors_new.csv', mode='w') as outfile:
    writer = csv.writer(outfile)
    for rows in reader:
        k = rows[0]
        v = rows[1]
        mydict = {k:v for k, v in rows}
    print(mydict)

위의 코드를 실행하면을 얻습니다 ValueError: too many values to unpack (expected 2). CSV 파일에서 하나의 사전을 작성하는 방법 감사.



답변

찾고있는 구문은 다음과 같습니다.

import csv

with open('coors.csv', mode='r') as infile:
    reader = csv.reader(infile)
    with open('coors_new.csv', mode='w') as outfile:
        writer = csv.writer(outfile)
        mydict = {rows[0]:rows[1] for rows in reader}

또는 파이썬 <= 2.7.1의 경우 다음을 원합니다.

mydict = dict((rows[0],rows[1]) for rows in reader)


답변

open을 호출하여 파일을 엽니 다 csv.DictReader.

input_file = csv.DictReader(open("coors.csv"))

input_file을 반복하여 csv 파일 dict reader 오브젝트의 행을 반복 할 수 있습니다.

for row in input_file:
    print(row)

또는 첫 줄에만 액세스

dictobj = csv.DictReader(open('coors.csv')).next() 

UPDATE
파이썬 3+ 버전에서,이 코드는 조금 변경합니다 :

reader = csv.DictReader(open('coors.csv'))
dictobj = next(reader) 


답변

import csv
reader = csv.reader(open('filename.csv', 'r'))
d = {}
for row in reader:
   k, v = row
   d[k] = v


답변

이것은 우아하지는 않지만 팬더를 사용하는 한 줄 솔루션입니다.

import pandas as pd
pd.read_csv('coors.csv', header=None, index_col=0, squeeze=True).to_dict()

인덱스에 dtype을 지정하려면 ( 버그 때문에 index_col 인수를 사용하는 경우 read_csv에 지정할 수 없습니다 ) :

import pandas as pd
pd.read_csv('coors.csv', header=None, dtype={0: str}).set_index(0).squeeze().to_dict()


답변

csv.reader를 dict로 변환해야합니다.

~ >> cat > 1.csv
key1, value1
key2, value2
key2, value22
key3, value3

~ >> cat > d.py
import csv
with open('1.csv') as f:
    d = dict(filter(None, csv.reader(f)))

print(d)

~ >> python d.py
{'key3': ' value3', 'key2': ' value22', 'key1': ' value1'}


답변

이것을 위해 numpy를 사용할 수도 있습니다.

from numpy import loadtxt
key_value = loadtxt("filename.csv", delimiter=",")
mydict = { k:v for k,v in key_value }


답변

if rows파일 끝에 빈 줄이있는 경우 추가하는 것이 좋습니다.

import csv
with open('coors.csv', mode='r') as infile:
    reader = csv.reader(infile)
    with open('coors_new.csv', mode='w') as outfile:
        writer = csv.writer(outfile)
        mydict = dict(row[:2] for row in reader if row)