CSV 파일 읽기 및 쓰기
# CSV 파일 읽기 및 쓰기
# CSV : MIME - text/csv
# CSV -콤마(,)로 구분이 되어 있는 record set이라고 보면 된다. 꼭 꼼마 콤마로 구분할 필요는 없다.
임의대로 우리가 원하는 예를들면 공백이나 합기호와 같은 것으로 구분할 수 있다. 다만, 콤마가 정석이다.
##파일 Write 실습(2)
csv 파일 설명
csv.reader
csv.DictReader
csv.writer
csv파일 전체 실습
test1.csv
Name,Code
Afghanistan,AF
Åland Islands,AX
Albania,AL
Algeria,DZ
American Samoa,AS
Andorra,AD
Angola,AO
Anguilla,AI
Antarctica,AQ
Antigua and Barbuda,AG
Argentina,AR
Armenia,AM
Aruba,AW
.
.
.
test2.csv
Name|Code
Afghanistan|AF
Åland Islands|AX
Albania|AL
Algeria|DZ
American Samoa|AS
Andorra|AD
Angola|AO
Anguilla|AI
Antarctica|AQ
Antigua and Barbuda|AG
.
.
.
import csv
# 예제1
with open('./resource/test1.csv', 'r') as f:
reader = csv.reader(f) #파일과 연결된 open함수에서의 변수를 reader에다가 인자로 넘겨주면 csv파일을 사용할 준비가 되었다는 것이다.
#next(reader) # Header Skip #test1의 Name,code를 생략하는것이다.
# 객체 확인
print(reader) #<_csv.reader object at 0x0000019B460F5100>
# 타입 확인
print(type(reader)) #<class '_csv.reader'>
# 속성 확인
print(dir(reader)) # __iter__ 반복문에서도 사용할 수 있다.
for c in reader:
# print(c)
['Name', 'Code']
['Afghanistan', 'AF']
['Åland Islands', 'AX']
.
.
.
# 타입 확인(리스트)
# print(type(c))
# list to str
print(' : '.join(c))#프린트의' : '을 join함수에 더해서 c를 하겠다.
Name : Code
Afghanistan : AF
Åland Islands : AX
Albania : AL
Algeria : DZ
American Samoa : AS
Andorra : AD
.
.
.
# 예제2
with open('./resource/test2.csv', 'r') as f:
reader = csv.reader(f, delimiter='|') # 구분자 선택
# 여기서 delimiter=','를 하면 ['spain|ES']처럼 리스트에 두 개의 원소로 나오지 않고 하나로 나온다.
# 왜냐하면 test2.csv의 구분자가 |이기 때문이다.
# next(reader) Header 스킵
for c in reader:
print(''.join(c))
NameCode
AfghanistanAF
Åland IslandsAX
AlbaniaAL
AlgeriaDZ
American SamoaAS
AndorraAD
.
.
.
# 예제3 (Dict 변환)
with open('./resource/test1.csv', 'r') as f:
reader = csv.DictReader(f)
# 확인
print(reader) #<csv.DictReader object at 0x000001C6F8E07B80>
print(type(reader)) #<class 'csv.DictReader'>
print(dir(reader)) # __iter__ 확인
for c in reader:
#print(c)
{'Name': 'Afghanistan', 'Code': 'AF'}
{'Name': 'Åland Islands', 'Code': 'AX'}
{'Name': 'Albania', 'Code': 'AL'}
{'Name': 'Algeria', 'Code': 'DZ'}
.
.
.
for k, v in c.items():
print(k, v)
print('-----')
Name Afghanistan
Code AF
-----
Name Åland Islands
Code AX
-----
Name Albania
Code AL
-----
Name Algeria
Code DZ
-----
Name American Samoa
Code AS
-----
Name Andorra
Code AD
-----
.
.
.
# 예제4
w = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21]]
with open('./resource/write1.csv', 'w', encoding='utf-8') as f:
print(dir(csv)) #['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL',...]
wt = csv.writer(f)
# dir 확인 /어떤 메소드들이나 속성이 들어있는지 확인
print(dir(wt)) # ['__class__', '__delattr__', '__dir__', '__doc__'...]
# 타입 확인
print(type(wt)) #<class '_csv.writer'>
for v in w:
wt.writerow(v)
#list를 csv로 만들 때는, 하나의 list가 하나의 record가 된다.
#그래서 7개이기 때문에 7줄이 만들어진다.
write.csv
1,2,3
4,5,6
7,8,9
10,11,12
13,14,15
16,17,18
19,20,21
# 예제5
with open('./resource/write2.csv', 'w', newline='') as f:
# 필드명
fields = ['one', 'two', 'three']
# Dict Writer 선언
wt = csv.DictWriter(f, fieldnames=fields)
# Herder Write
wt.writeheader() #여기까지하면 write2.csv에 헤더 이름이 one,two,three로 내부적으로 작성된 상태이다.
write2.csv
one,two,three
with open('./resource/write2.csv', 'w', newline='') as f:
# 필드명
fields = ['one', 'two', 'three']
# Dict Writer 선언
wt = csv.DictWriter(f, fieldnames=fields)
# Herder Write
wt.writeheader() #여기까지하면 write2.csv에 헤더 이름이 one,two,three로 내부적으로 작성된 상태이다.
for v in w:
wt.writerow({'one': v[0], 'two': v[1], 'three': v[2]})
write2.csv
one,two,three
1,2,3
4,5,6
7,8,9
10,11,12
13,14,15
16,17,18
19,20,21
'Python > Today I learned' 카테고리의 다른 글
TIL#35 객체, 클래스, 인스턴스 관계정리(매우 중요) (0) | 2021.05.20 |
---|---|
TIL#34 클래스 self (0) | 2021.05.20 |
TIL#32 파일 읽기 및 쓰기 (0) | 2021.05.19 |
TIL#31 외장함수 (0) | 2021.05.19 |
TIL#30 내장함수 (0) | 2021.05.19 |