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

+ Recent posts