
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 |