인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
File Write
- 기본 개념
# File 기본 개념 # r : 읽기 모드 # w : 쓰기 모드 # a : 추가 모드 # t : 텍스트 모드(기본값) # b : 바이너리 모드(기본값) # .. : 상위 폴더로 가는 경로(상대경로) # . : 현재 폴더의 경로(상대경로) # /Users/donggyu/Desktop/python_basic : 절대경로 # 읽기(Read) 활용 예시 # 예제1 f = open('/Users/donggyu/Desktop/python_basic/resource/it_news.txt') # 절대 경로 f = open('./resource/it_news.txt', 'rt', encoding='UTF-8') # 상대 경로 # 참고로 상대 경로에서 open( ) 함수의 두 번째 인자로'rt'대신 'r'을 써도 된다. # 그 이유는 t가 기본 값이므로 생략이 가능하기 때문이다. # 또한, open( ) 함수의 세 번째 인자인 encoding='UTF-8'은 생략해도 무방하다. # 파이썬은 기본적으로 UTF-8로 인코딩을 하기 때문이다. print(dir(f)) # 속성 확인 print(f.encoding) # 인코딩 확인 : UTF-8 print(f.name) # 파일 이름 확인 : ./resource/it_news.txt print(f.mode) # 모드 확인 : rt(텍스트를 읽어온다는 의미) cts = f.read() print(cts) # read( ) 함수는 텍스트의 내용을 읽어와서 출력한다. f.close() # 파일을 열었으면, close( ) 함수로 반드시 닫아야 한다.(리소스 낭비 방지) # 예제2 with open('./resource/it_news.txt', 'rt', encoding='UTF-8') as f: c = f.read() print(c) # 텍스트의 내용을 읽어와서 출력함 print(iter(c)) # <str_iterator object at 0x10d2f3b50> print(list(c)) # 텍스트의 모든 내용을 한 글자 단위로 리스트에 넣어 출력함 # with문과 alias를 통해 보다 간결한 코드를 작성할 수 있다.(동일한 읽기 기능) # with문에서는 f.close( ) 코드로 파일을 닫지 않아도 된다. # 예제3 # read( ) : 전체 텍스트를 읽어온다. # read(10) : 10byte의 크기만큼만 텍스트를 읽어온다. # 즉, read( ) 안에 인자를 넣어주면, 해당 인자의 byte 크기 만큼만 텍스트를 읽어온다. with open('./resource/it_news.txt', 'rt', encoding='UTF-8') as f: c = f.read(20) print(c) # 결과 : Right now gamers can c = f.read(20) print(c) # 결과 : pay just $1 for acc f.seek(0,0) # 커서 초기화 c = f.read(20) print(c) # 결과 : Right now gamers can # f.read(20)코드는 텍스트 파일의 내용을 20byte 크기만큼만 읽어오겠다는 의미이다. # 텍스트 내용일 읽어온 상태에서 다시 한 번 텍스트 파일의 내용일 읽어올 경우, # 처음 20byte만큼 출력된 부분의 마지막부분에 이어서 20byte의 내용을 읽어온다. # f.seek(0,0)코드는 읽어오는 부분을 처음으로 초기화시킨다.(커서의 초기화) # 즉, 텍스트에서 커서를 조정할 수 있는 기능이다.(인자 0,0은 from : 0, to : 0 의미) # 예제4 # readline( ) : 텍스트 내용을 한 줄씩 읽어온다. with open('./resource/it_news.txt', 'rt', encoding='UTF-8') as f: line = f.readline() print(line) # 결과 : 텍스트 내용의 첫 번째 줄을 읽어온다. line = f.readline() print(line) # 결과 : 텍스트의 그 다음 줄을 읽어온다. # f.readline( ) 함수의 코드를 연달아 작성하면, # 텍스트의 첫 번째 줄을 읽어온 후에, 이어서 텍스트의 두 번째 줄을 읽어온다. # 예제5 # readlines( ) : 텍스트 전체를 읽은 후, 리스트에 라인별로 내용을 저장하고 읽어온다. with open('./resource/it_news.txt', 'rt', encoding='UTF-8') as f: cts = f.readlines() print(cts) # 텍스트 내용을 라인별로 리스트에 정리하여 출력함 for c in cts: print(c, end='') # 리스트 형태의 내용을 다시 원문형태로 복원하여 출력함 # 파일 쓰기(Write) # 예제1 with open('./resource/contents1.txt', 'wt') as f: f.write('I love Python\n') # 결과 : contents1.txt 파일에 'I love Python'의 문자열 내용을 쓸 수 있다. # 참고로 상대 경로에서 open( ) 함수의 두 번째 인자로'wt'대신 'w'을 써도 된다. # 그 이유는 t가 기본 값이므로 생략이 가능하기 때문이다. # 예제2 with open('./resource/contents1.txt', 'wt') as f: f.write('I love Python2\n') # 결과 : # contents1.txt 파일의 텍스트 내용이 문자열 I love Python에서 # 문자열 I love Python2로 바뀐다. with open('./resource/contents1.txt', 'a') as f: f.write('I love Python3\n') # 결과 : # contents1.txt 파일의 기존 텍스트 내용(I love Python2)에 # 문자열 I love Python3이 추가된다. # open( ) 함수의 두 번째 인자인 w와 a는 기능의 차이점이 존재한다.(중요) # 예제3 # writelines( ) : 리스트 자료형의 요소를 파일의 텍스트 내용에 쓴다. with open('./resource/contents1.txt', 'a') as f: list = ['Orange\n', 'Apple\n', 'Banana\n', 'Melon\n'] f.writelines(list) # 결과 : # Orange # Apple # Melon # 예제4 with open('./resource/contents3.txt', 'a') as f: print('Test Text Write!', file = f) print('Test Text Write!', file = f) print('Test Text Write!', file = f) # 결과 : print문의 내용을 터미널창이 아닌 파일의 텍스트 내용에 쓸 수 있다.
- 응용 개념
# CSV 파일 활용 예시 # CSV 파일 읽기(Read) # 예제1 import csv with open('./resource/test1.csv', 'r', encoding='UTF-8') as f: reader = csv.reader(f) next(reader) # Header skip print(reader) # 객체 확인 print(type(reader)) # 타입 확인 print(dir(reader)) # 속성 확인(반복문에서도 사용 가능 : __iter__) for c in reader: print(c) # 결과 : list 형태로 파일 내용을 출력함 print(type(c)) # 결과 : <class 'list'> print(' : '.join(c)) # list 형태의 내용을 원하는 형식으로 변환함 # for문에서 reader( ) 함수를 함께 사용하면, # 특정 기호로 구분된 CSV 파일의 내용을 읽어와서 리스트 형태로 반환한다. # next(reader)의 코드는 CSV 파일의 Header 값을 스킵해준다.(Name,Code이 스킵됨) # 즉, 파일을 읽어오는 커서가 한 칸 아래로 이동한다고 이해해도 무방하다. # open( ) 함수의 인자인 encoding='UTF-8'를 생략해도 된다.(기본 값 : UTF-8) # join( ) 함수를 사용해서 리스트 형태의 출력된 내용을 원하는 형식으로 바꿀 수 있다. # 예제2 with open('./resource/test2.csv', 'r', encoding='UTF-8') as f: reader = csv.reader(f, delimiter= '|') for c in reader: print(c) # 결과 : list 형태로 파일 내용을 출력함 # reader = csv.reader(f, delimiter= '|') 코드에서 delimiter= '|'는 # 구분자를 의미하며, 기호 '|'를 기준으로 CSV 파일의 내용을 리스트 형태로 구분하여 # 반환한다. # 예제3 with open('./resource/test1.csv', 'r', encoding='UTF-8') as f: reader = csv.DictReader(f) # 딕셔너리형태로 읽어옴 print(reader) # 객체 확인 print(type(reader)) # <class 'csv.DictReader'> print(dir(reader)) # __iter__ 존재(반복문에서 사용 가능) for c in reader: print(c) # 결과 : 딕셔너리 형태로 파일의 내용을 출력함 # DictReader( ) 함수를 사용하면 CSV 파일의 내용을 딕셔너리 형태로 읽어와서 반환한다. for c in reader: 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 # ------------------ # ... # items( ) 함수를 사용해서 키와 벨류를 반환할 수 있다. # CSV 파일 쓰기(Write) # 예제1 w = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]] with open('./resource/write1.csv', 'w', encoding='UTF-8') as f: print(dir(csv)) # 속성 확인 wt = csv.writer(f) print(dir(wt)) # 속성 확인 print(type(wt)) # 타입 확인 for v in w: wt.writerow(v) # 결과 : # 1,2,3 # 4,5,6 # 7,8,9 # 10,11,12 # 13,14,15 # 16,17,18 # writerow( ) 함수를 사용하여 리스트 자료형을 CSV 파일로 만들 경우, # 전체 리스트의 각 요소들이 1줄씩 CSV파일의 내용으로 쓰여진다. # 여기서 전체 리스트의 각 요소들은 [1,2,3], [4,5,6]....를 의미한다. # 예제2 with open('./resource/write2.csv', 'w', encoding='UTF-8') as f: fields = ['One', 'Two', 'Three'] # 필드명 정의 wt = csv.DictWriter(f, fieldnames=fields) wt.writeheader() for v in w: wt.writerow({'One': v[0], 'Two': v[1], 'Three': v[2]}) # 결과 : # One,Two,Three # 1,2,3 # 4,5,6 # 7,8,9 # 10,11,12 # 13,14,15 # 16,17,18 # DictWriter( ) 함수를 사용하면 CSV 파일의 내용에 딕셔너리 형태로 쓰여진다. # 또한, DictWriter( ) 함수의 두 번째 인자는 앞서 정의한 필드명을 필드이름으로 # 사용하는 것을 의미한다. # writerow( ) 함수를 사용하기 때문에 앞선 예시와 동일하게 리스트 자료형의 # 각 요소들이 1줄씩 CSV 파일의 내용으로 쓰여지는 것이다. # wt.writeheader( ) 함수를 사용하면 앞서 정의한 필드명이 CSV파일의 # Header로 사용된다.
'Python' 카테고리의 다른 글
Python - crawling pattern (0) | 2021.10.28 |
---|---|
Python - 기본 문법(추가내용) (0) | 2021.10.21 |
Python - External functions (0) | 2021.10.18 |
Python - Built in functions (0) | 2021.10.18 |
Python - Exception (0) | 2021.10.18 |
댓글