파일 입출력(FILE I/O)
파일 다루기 : open() 함수
open 함수 원형
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
file 매개변수는 반드시 명시적으로 밝혀줘야 함
file : 파일 Directory
파일 열기 모드
r : 읽기 모드
- 파일을 읽기만 할 때 사용
w : 쓰기 모드
파일에 내용을 쓸 때 사용
해당 파일이 이미 존재하는 경우 내용이 모두 사라지고(truncate)
파일이 없으면 새로 생성됨
특정 경로에 생성하고 싶으면 디렉토리까지 적어주자.
a : 추가 모드
- 파일의 마지막에 새로운 내용을 추가할 때 사용
x : 베타적 생성 모드(O_EXCL)
- 파일이 이미 존재하고 있는 경우 실패
b : 2진(바이너리) 모드
t : 텍스트 모드
+: 업데이트를 위한 디스크 파일 열기
버퍼링
0 : 버퍼링 사용하지 않음(바이너리 모드만 지원)
1: 개행 문자를 만날때 까지 버퍼링(라인 버퍼링, 텍스트 모드에서 지원)
1 이상의 임의의 수 : 임의의 값으로 버퍼의 크기를 직접 설정하고 싶을 때
인코딩(텍스트 모드)
- 파일 인코딩, 디코딩 할 때 사용되는 format
erros (인코딩 할 때 에러 처리 옵션)
파일을 open하면 반드시 close 해야함
f = open("new_file.txt", 'w') # 파이썬 내장함수 open(파일이름, 파일 열기 모드) f.close()
열려 있는 파일 객체를 닫아 주는 역할을 함
- close()를 생략해도 자동으로 닫아주긴 하지만 쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생함.
파일 쓰기
FILE객체의 write()메소드를 사용해 파일 쓰기
f = open("new_file.txt", 'w') # write mode for i in range(1, 11): data = "%d번째 줄입니다.\n" % i f.write(data) f.close()
print()는 프롬프트(터미널, 콘솔)에, f.write는 파일에 value를 출력
f.write()의 return value : 문자의 수
파일 읽기
read() 메소드
- read(n) : 현재 위치에서 n개의 글자만 읽음
- seek(n) : 현재 위치를 n번째 위치로 설정
f = open('text.txt', 'r') lines = f.read() # 파일의 모든 내용을 읽기 str = f.read(10) # 처음부터 10개의 글자를 읽어서 저장 str2 = f.read(20) # 마지막으로 읽은 글자 다음부터 20개의 글자를 읽어서 저장 f.seek(0) # current position를 처음으로 설정
readline() 메소드
- 한 줄 읽기
- 데이터가 \n이 나올 때 까지 읽기
- 리턴 값이 \n이 포함되어 있음 --> 여러번 print 실행 시 두 줄 사이에 empty line이 있음
f = open("new_file.txt", 'r') while True: line = f.readline() # 더 이상 읽을 줄이 없으면 None을 출력한다. if not line: break print(line) f.close()
readlines() 메소드
- 모든 line을 읽어 리스트에 line별로 각각 저장
f = open("new_file.txt", 'r') lines = f.readlines() # readlines 함수는 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려줌. for line in lines: print(line) f.close()
FILE 객체의 Iterable 특성을 이용해 읽기
- read와 관련된 함수를 사용하지 않고 파일 읽기
f = open('text.txt', 'r') for line in f: # for 문을 통해 라인별로 읽기 print(line) f.close()
- read와 관련된 함수를 사용하지 않고 파일 읽기
파일에 새로운 내용 추가하기
기존에 있는 내용을 살리고 새로운 값만 추가하고 싶을때 사용
추가모드 'a'로 열면 됨
f = open("new_file.txt", 'a') for i in range(11, 20): data = "%d 번째 줄입니다.\n" % i f.write(data) f.close()
- write() 대신 writelines() 메소드의 매개변수로 리스트를 넘겨 추가할 수도 있다.
with문과 함께 사용하기
with문을 사용하여 파일을 열고 닫는 걸 자동으로 처리
with open("foo.txt", 'w') as f: f.write("Life is too short, you need python")
- with 블록을 벋어나는 순간 f가 자동으로 close 된다.
with문에서 두개의 open 함수를 이어 붙일 때 백슬래시() 사용
with open("fii.txt", 'w') as fi, \ open("foo,txt", 'r') as fo:
sys 모듈로 매개변수 주기
파일을 실행할 때 다음과 같이 실행함
- (명령 프롬프트 명령어) [인수1 인수2 ...]
import sys args = sys.argv[1:] for i in args: print(i)
- sys 모듈의 argv는 명령창에서 입력한 인수를 의미.
- argv[0]는 파일 이름 sys1.py가 되고, argv[1]부터 나오는 인수가 argv의 요소가 된다.
참조) Do it! 점프 투 파이썬 (박응용 지음), https://wikidocs.net (파이썬 계단밟기)
'Programming Language > Python' 카테고리의 다른 글
[Python] 17. 모듈(module) (0) | 2023.11.07 |
---|---|
[Python] 16. 클래스(Class), 상속(inheritance) (0) | 2023.11.06 |
[Python] 14. 사용자 입력 (0) | 2023.11.05 |
[Python] 13. 함수(function) (0) | 2023.11.05 |
[Python] 12. for 문(for statements) (0) | 2023.11.05 |