csv 파일에서 사전을 생성하시겠습니까?
csv 파일에서 사전을 작성하려고 합니다.csv 파일의 첫 번째 열에는 고유한 키가 포함되어 있고 두 번째 열에는 값이 포함되어 있습니다.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)
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}
또는 python <= 2.7.1의 경우 다음을 원할 수 있습니다.
mydict = dict((rows[0],rows[1]) for rows in reader)
open을 호출하여 csv를 사용하여 파일을 엽니다.딕트 리더
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()
업데이트 python 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'}
이 구조의 CSV가 있다고 가정합니다.
"a","b"
1,2
3,4
5,6
출력은 다음과 같습니다.
[{'a': '1', ' "b"': '2'}, {'a': '3', ' "b"': '4'}, {'a': '5', ' "b"': '6'}]
zip 기능(아직 언급되지 않음)은 간단하고 매우 유용합니다.
def read_csv(filename):
with open(filename) as f:
file_data=csv.reader(f)
headers=next(file_data)
return [dict(zip(headers,i)) for i in file_data]
팬더를 더 좋아한다면, 팬더가 이것을 아주 잘 할 수 있습니다.
import pandas as pd
def read_csv(filename):
return pd.read_csv(filename).to_dict('records')
이것에도 numpy를 사용할 수 있습니다.
from numpy import loadtxt
key_value = loadtxt("filename.csv", delimiter=",")
mydict = { k:v for k,v in key_value }
원라이너 솔루션
import pandas as pd
dict = {row[0] : row[1] for _, row in pd.read_csv("file.csv").iterrows()}
다음과 같은 단순한 csv 파일의 경우
id,col1,col2,col3
row1,r1c1,r1c2,r1c3
row2,r2c1,r2c2,r2c3
row3,r3c1,r3c2,r3c3
row4,r4c1,r4c2,r4c3
빌트인만 사용하여 파이썬 사전으로 변환할 수 있습니다.
with open(csv_file) as f:
csv_list = [[val.strip() for val in r.split(",")] for r in f.readlines()]
(_, *header), *data = csv_list
csv_dict = {}
for row in data:
key, *values = row
csv_dict[key] = {key: value for key, value in zip(header, values)}
그러면 다음과 같은 사전이 생성됩니다.
{'row1': {'col1': 'r1c1', 'col2': 'r1c2', 'col3': 'r1c3'},
'row2': {'col1': 'r2c1', 'col2': 'r2c2', 'col3': 'r2c3'},
'row3': {'col1': 'r3c1', 'col2': 'r3c2', 'col3': 'r3c3'},
'row4': {'col1': 'r4c1', 'col2': 'r4c2', 'col3': 'r4c3'}}
주의: Python 사전에는 고유한 키가 있으므로 csv 파일에 중복된 키가 있는 경우ids
각 행을 목록에 추가해야 합니다.
for row in data:
key, *values = row
if key not in csv_dict:
csv_dict[key] = []
csv_dict[key].append({key: value for key, value in zip(header, values)})
추가할 것을 제안합니다.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)
numpy 패키지 사용에 문제가 없다면 다음과 같은 작업을 수행할 수 있습니다.
import numpy as np
lines = np.genfromtxt("coors.csv", delimiter=",", dtype=None)
my_dict = dict()
for i in range(len(lines)):
my_dict[lines[i][0]] = lines[i][1]
예를 들어, 다음과 같은 데이터를 CSV라고 합니다.test.txt
/test.csv
(CSV는 텍스트파일의 일종입니다)
a,b,c,d
1,2,3,4
5,6,7,8
지금은 판다를 사용하고 있다.
import pandas as pd
df = pd.read_csv("./text.txt")
df_to_doct = df.to_dict()
각 행에 대해 다음과 같이 됩니다.
df.to_dict(orient='records')
그리고 이것이 마지막입니다.
사용할 수 있습니다. 꽤 멋집니다.
import dataconverters.commas as commas
filename = 'test.csv'
with open(filename) as f:
records, metadata = commas.parse(f)
for row in records:
print 'this is row in dictionary:'+rowenter code here
도 한 번 써보세요.defaultdict
★★★★★★★★★★★★★★★★★」DictReader
.
import csv
from collections import defaultdict
my_dict = defaultdict(list)
with open('filename.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file)
for line in csv_reader:
for key, value in line.items():
my_dict[key].append(value)
반환:
{'key1':[value_1, value_2, value_3], 'key2': [value_a, value_b, value_c], 'Key3':[value_x, Value_y, Value_z]}
많은 솔루션이 게시되었으며 CSV 파일의 다른 열 수에 대해 작동하는 내 솔루션에 기여하고 싶습니다.그러면 열당 키가 하나씩 있는 사전이 생성되고 각 키의 값은 해당 열에 요소가 있는 목록입니다.
input_file = csv.DictReader(open(path_to_csv_file))
csv_dict = {elem: [] for elem in input_file.fieldnames}
for row in input_file:
for key in csv_dict.keys():
csv_dict[key].append(row[key])
CSV에서 딕트로의 어프로치를 다음에 나타냅니다.
import pandas
data = pandas.read_csv('coors.csv')
the_dictionary_name = {row.k: row.v for (index, row) in data.iterrows()}
다음과 같은 경우:
- CSV에서는 1개의 키와 1개의 값만 키, 값으로 사용 가능
- 다른 패키지를 Import하지 않음
- 한 번에 받아쓰기 만들기
다음을 수행합니다.
mydict = {y[0]: y[1] for y in [x.split(",") for x in open('file.csv').read().split('\n') if x]}
그게 뭘 하는데?
이 명령어는 목록 이해를 사용하여 행을 분할하고 마지막 "if x"를 사용하여 빈 행(보통 끝)을 무시한 다음 사전 이해를 사용하여 딕트로 압축됩니다.
언급URL : https://stackoverflow.com/questions/6740918/creating-a-dictionary-from-a-csv-file
'sourcecode' 카테고리의 다른 글
MariaDB Bitwise AND(&) 연산 (0) | 2022.09.16 |
---|---|
테이블에서 가장 큰 ID를 가진 전체 행을 선택하려면 어떻게 해야 합니까? (0) | 2022.09.16 |
원형 구조를 JSON과 같은 형식으로 인쇄하려면 어떻게 해야 합니까? (0) | 2022.09.16 |
유효하지 않은 대상 릴리스: 1.7 (0) | 2022.09.16 |
왜 내 PHP 앱이 404 오류를 보내지 않나요? (0) | 2022.09.16 |