만약 쉼표로 구분되어 있는 CSV 파일이 아래와 같고,
#,언어,경험 1,C,True 2,C++,True 3,C#,True 4,python,True 5,java,True |
csv.DictReader 클래스 정의 시 fieldnames 전달인자 값을 정의하지 않으면, CSV 파일의 첫번째 라인 내 데이터를 기준으로 각 라인의 값을 딕셔너리 형태로 읽어올 수 있습니다.
import csv
with open('python_csv_05_read_dict_1.csv', mode='rt', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
{'#': '1', '언어': 'C', '경험': 'True'} {'#': '2', '언어': 'C++', '경험': 'True'} {'#': '3', '언어': 'C#', '경험': 'True'} {'#': '4', '언어': 'python', '경험': 'True'} {'#': '5', '언어': 'java', '경험': 'True'} |
만약 csv.DictReader 클래스 정의 시 fieldnames 전달인자 값을 지정하면,
import csv
with open('python_csv_05_read_dict_1.csv', mode='rt', encoding='utf-8') as f:
# reader = csv.DictReader(f)
reader = csv.DictReader(f, fieldnames=['A', 'B', 'C'])
for row in reader:
print(row)
그 결과는 다음과 같이 바뀌게 됩니다.
{'A': '#', 'B': '언어', 'C': '경험'} {'A': '1', 'B': 'C', 'C': 'True'} {'A': '2', 'B': 'C++', 'C': 'True'} {'A': '3', 'B': 'C#', 'C': 'True'} {'A': '4', 'B': 'python', 'C': 'True'} {'A': '5', 'B': 'java', 'C': 'True'} |
csv 모듈의 DicReader 클래스에서 fieldnames의 기본값은 None으로 정의되어 있습니다.
class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
CSV 파일의 데이터를 딕셔너리 형태로 읽어올 때 아래와 같이 열의 데이터와 행의 데이터 개수가 일치하지 않으면,
#,언어,경험,선호 1,C,True,yes 2,C++,True 3,C#,True 4,python,True,yes,관심 많아요 5,java,True 6,go |
다음과 값이 일치하지 않는 딕셔너리의 key 또는 value 값은 None이 됩니다.
{'#': '1', '언어': 'C', '경험': 'True', '선호': 'yes'} {'#': '2', '언어': 'C++', '경험': 'True', '선호': None} {'#': '3', '언어': 'C#', '경험': 'True', '선호': None} {'#': '4', '언어': 'python', '경험': 'True', '선호': 'yes', None: ['관심', '많아요']} {'#': '5', '언어': 'java', '경험': 'True', '선호': None} {'#': '6', '언어': 'go', '경험': None, '선호': None} |
'코딩 > 파이썬 표준 라이브러리' 카테고리의 다른 글
[Python] os 및 os.path로 폴더/파일 관리 (0) | 2020.11.18 |
---|---|
[CSV] 6장. 딕셔너리 데이터를 CSV 파일에 쓰기 (0) | 2020.10.31 |
[CSV] 4장. CSV 파일 읽기 (TSV) (0) | 2020.10.31 |
[CSV] 3장. CSV 파일 쓰기 (0) | 2020.10.31 |
[CSV] 2장. CSV 파일 읽기 (0) | 2020.10.31 |