파일 생성하기
f = open("새파일.txt", 'w')
f.close()
open 함수는 다음과 같이 '파일 이름'과 '파일 열기 모드'를 입력값으로 받고 결괏값으로 파일 객체를 돌려준다.
파일 객체 = open(파일 이름, 파일 열기 모드)
파일 열기 모드
파일 열기 모드 | 설명 |
r | 읽기 모드 - 파일을 읽기만 할 때 사용 |
w | 쓰기 모드 - 파일에 내용을 쓸 때 사용 |
a | 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용 |
파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.
만약 새파일.txt 파일을 C:/doit 디렉터리에 생성하고 싶다면 다음과 같이 작성하면 된다.
f = open("C:/doit/새파일.txt", 'w')
f.close()
f.close()는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 사실 이 문장은 생략해도 된다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문이다. 하지만 close()를 사용해서 열려있는 파일을 직접 닫아주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.
파일 경로와 슬래시(/)
파이썬 코드에서 파일 경로를 표시할 때 "C:/doit/새파일.txt"처럼 슬래시(/)를 사용할 수 있다. 만약 역슬래시(\)를 사용한다면 "C:\\doit\\새파일.txt"처럼 역슬래시를 2개 사용하거나 r"C:\doit\새파일.txt"와 같이 문자열 앞에 r문자(Raw String)를 덧붙여 사용해야 한다. 왜냐하면 "C:\note\test.txt"처럼 파일 경로에 \n과 같은 이스케이프 문자가 있을 경우 줄바꿈 문자로 해석되어 의도했던 파일 경로와 달라지기 때문이다.
파일을 쓰기 모드로 열어 출력값 적기
# writedata.py
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
print(data)
두 프로그램의 다른 점을 data를 출력하는 방법이다. 두 번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법이고, 첫 번째 방법은 모니터 화면 대신 파일에 결괏값을 적는 방법이다. 두 방법의 차이점은 print 대신 파일 객체 f의 write 함수를 사용한 것 말고는 없다.
명령 프롬프트 창에서 첫 번째 에제를 실행한 후 C:/doit 디렉터리를 살펴보면 새파일.txt 파일이 생성되었음을 확인할 수 있다. 또 새파일.txt파일에는 'i번째 줄입니다.'가 1번째부터 10번째까지 반복되어 있을 것이다.
프로그램의 외부에서 저장된 파일을 읽는 여러가지 방법
readline 함수 사용하기
# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
위 예는 f.open("새파일.txt", "r")로 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번째 줄을 읽어 출력하는 경우이다. 앞에서 만든 새파일.txt를 수정하거나 지우지 않았다면 위 프로그램을 실행했을 때 새파일.txt의 가장 첫번째 줄이 화면에 출력될 것이다.
만약 모든 줄을 읽어서 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.
# readline_all.py
f = open("C:/doit/새파일.txt", 'r')
while True:
line = f.readline()
if not line: break
print(line)
f.close()
while True: 무한 루프 안에서 f.readline()을 사용해 파일을 계속해서 한 줄씩 읽어 들인다. 만약 더 이상 읽을 줄이 없으면 break를 수행한다.(readline()은 더 이상 읽을 줄이 없을 경우 None을 출력한다.)
readlines 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
print(line)
f.close()
readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트를 돌려준다. 따라서 위 예에서 lines는 리스트 ["1 번째 줄입니다.", "2 번째 줄입니다.", ...,"10 번째 줄입니다."]가 된다.
줄 바꿈(\n) 문자 제거하기
파일을 읽을 때 줄 끝의 줄 바꿈(\n) 문자를 제거하고 사용해야 할 경우가 많다. 다음처럼 strip 함수를 사용하면 줄 바꿈 문자를 제거할 수 있다.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
line = line.strip() # 줄 끝의 줄 바꿈 문자를 제거한다.
print(line)
f.close()
read 함수 사용하기
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
f.read()는 파일의 내용전체를 문자열로 돌려준다. 따라서 위 예의 data는 파일의 전체 내용이다.
파일에 새로운 내용 추가하기
쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다.
원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우 파일을 추가 모드('a')로 열면 된다.
# adddata.py
f = open("C:/doit/새파일.txt",'a')
for i in range(11, 20):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close()
새파일.txt를 추가 모드('a')로 열고 write을 사용해서 결괏값을 기존 파일에 추가해 적는 예이다. 추가 모드로 파일을 열었기 때문에 새파일.txt 파일이 원래 가지고 있던 내용 바로 다음부터 결괏값을 적기 시작한다.
with문과 함께 사용하기
f = open("foo.txt", 'w')
f.write("Life is too short, you need python")
f.close()
파일을 열면 위와 같이 항상 close해주는 것이 좋다.
파이썬의 with문이 파일을 열고 닫는 것을 자동으로 처리할 수 있도록 해준다.
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")
위와 같이 with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 close되어 편리하다.
sys 모듈로 매개변수 주기
파이썬에서는 sys 모듈을 사용하여 매개변수를 직접 줄 수있다. sys 모듈을 사용하려면 아래 예의 import sys처럼 import 명령어를 사용해야 한다.
#sys1.py
import sys
args = sys.argv[1:]
for i in args:
print(i)
위 예는 입력받은 인수를 for문을 사용해 차례대로 하나씩 출력하는 예이다. sys 모듈의 argv는 명령 창에서 입력한 인수를 의미한다. 즉 다음과 같이 입력했다면 argv[0]은 파일 이름 sys1.py가 되고 argv[1]부터는 뒤에 따라오는 인수가 차례대로 argv의 요소가 된다.
이 프로그램을 C:/doit 디렉터리에 저장한 후 매개변수를 함께 주어 실행하면 다음과 같은 결괏값을 얻을 수 있다.
C:\doit>python sys1.py aaa bbb ccc
aaa
bbb
ccc
<출처>
04-3 파일 읽고 쓰기
우리는 이 책에서 이제까지 값을
wikidocs.net
'Python' 카테고리의 다른 글
[Python] Flask 기초 사용법 (0) | 2022.01.26 |
---|---|
[Python] 쓰기모드로 파일 열었을 때 FileNotFoundError: [Error 2] No such file or directory/ 파일이름에 사용할 수 없는 기호와 문자 (0) | 2022.01.19 |
[Python]사용자 입력과 출력 (0) | 2022.01.19 |
[Python]클래스 (0) | 2022.01.16 |
[Python]자료형: 딕셔너리 자료형 (0) | 2022.01.15 |