반응형

오늘은 파이썬의 읽고 쓰기에 대해서 리뷰할 것이다.

# 파일 읽고 쓰기

# 파일 생성하기
f = open("새파일.txt", 'w')
f.close()
# 파일을 생성하기 위해 우리는 파이썬 내장 함수 open 을 사용햇다.
# open 함수는 다음과 같이 "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 결과값으로 파일 객체를 돌려준다.

# 파일 객체 = open(파일 이름, 파일 열기 모드)

# 파일 열기 모드에는 다음과 같은 것이 있다.

# 파일 열기 모드에는 다음과 같은 것이 있다.

# 파일열기모드	설명
# r	읽기모드 - 파일을 읽기만 할 때 사용
# w	쓰기모드 - 파일에 내용을 쓸 때 사용
# a	추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용

# 파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다.
# 위 예에서는 디렉토리에 파일이 없는 상태에서 새파일.txt를 쓰기 모드인 'w'로 열었기 때문에 새파일.txt라는 이름의 새로운 파일이 현재 디럭토리에 생성되는 것이다.

# 만약 새파일.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과 같은 이스케이프 문자가 있을 경우 줄바꿈 문자로 해석되어 의도했던 파일 경로와 달라지기 때문이다.

# 파일을 쓰기 모드로 열어 출력값 적기
# 위 예에서는 파일을 쓰기 모드로 열기만 했지 정작 아무것도 쓰지는 않았다.
# 이번에는 에디터를 열고 프로그램의 출력값을 파일에 직접 써 보자.
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" % 1
    print(data)
# 두 프로그램의 다른 점은 data를 출력하는 방법이다.
# 두 번째 방법은 우리가 계속 사용해 왔던 모니터 화면에 출력하는 방법이고, 첫 번째 방법은 모니터 화면 대신 파일에 결과값을 적는 방법이다.
# 두 방법의 차이점은 print 대신 파일 객체 f의 write 함수를 사용한 것 말고는 없으니 바로 눈에 들어올 것이다.

# 프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법
# 파이썬에는 외부 파일을 읽어 들여 프로그램에서 사용할 수 잇는 여러 가지 방법이 있다.

# readline 함수 이용하기
# 첫 번째 방법은 readline 함수를 사용하는 방법이다. 다음 예를 보자.
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
# 위 예는 f.open("새파일.txt", 'r')로 파일을 읽기 모드로 연 후 readline()을 사용해서 파일의 첫 번쨰 줄을 읽어 출력하는 경우이다.
# 앞에서 만든 새파일.txt의 가장 첫 번째 줄이 화면에 출력 될 것이다.

# 1번쨰 줄입니다.

# 만약 모든 줄을 읽어서 화면에 출력하고 싶다면 다음과 같이 작성하면 된다.
# 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()은 더 이상 읽을 줄이 없을 경우 빈 문자열('')을 리턴한다)

# ※ 한 줄 씩 읽어 출력할 때 줄 끝에 \n문자가 있으므로 빈 줄도 같이 출력된다.

# 앞의 프로그램을 다음 프로그램과 비교해 보자.
while True:
    data = input()
    if not data: break
    print(data)
# 위 예는 사용자의 입력을 받아서 그 내용을 출력하는 경우이다. 파일을 읽어서 출력하는 예제와 비교해 보자.
# 입력을 받는 방식만 다르다는 것을 바로 알 수 있을 것이다.
# 두번째 예는 키보드를 사용한 입력 방법이고, 첫 번째 예는 파일을 사용한 입력 방법이다.

# readlines 함수 사용하기
# 두 번째 방법은 readlines 함수를 사용하는 방법이다. 다음 예를 보자.
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
    print(line)
f.close()
# readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다.
# 따라서 위 예에서 lines는 리스트 ["1 번째 줄입니다. \n", "2 번째 줄입니다.\n"..., "10 번째 줄입니다.\n"]가 된다.
# f.readlines()에서 f.readline()과는 달리 s가 하나 더 붙어있음에 유의하자.

# 줄 바꿈(\n)문자 제거하기
# 파일을 읽을 때 줄 끝의 줄 바꿈(\n)문자를  제거하고 사용해야 할 경우가 많다.
# 다음처럼 strip 함수를 사용하면 줄 바꿈 문자를 제거할 수 있다.
f = open("C:/doti/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    line = line.strip()
    print(line)
f.close()

# read 함수 사용하기
# 세 번쨰 방법은 read 함수를 사용하는 방법이다. 다음 예를 보자.
f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()
# f.read()는 파일의 내용 전체를 문자열로 돌려준다.따라서 위 예의 data는 파일의 전체 내용이다.

# 파일에 새로운 내용 추가하기
# 쓰기 모드('w')로 파일을 열 때 이미 존재하는 파일을 열면 그 파일의 내용이 모두 사라지게 된다.
# 하지만 원래 있던 값을 유지하면서 단지 새로운 값만 추가해야 할 경우도 있다.
# 이런 경우에는 파일을 추가모드('a')로 열면 된다.
f = open("C:/doit/새파일.txt", 'a')
for i in range(11, 20):
    data = "%d번째 줄입니다. \n" % i
    f.werite(data)
f.close()

# 위 예는 새파일.txt 파일을 추가보드 ('a')로 열고 write를 사용해서 결과값을 기존 파일에 추가해 적는 예이다.
# 여기에서 추가 모드로 파일을 열었기 때문에 새파일.txt 파일이 원래 가지고 있던 내용 바로 다음부터 결과값을 적기 시작한다.

# wirh문과 함꼐 사용하기
# 지금까지 살펴본 예제를 보면 항상 다음과 같은 방식으로 파일을 열고 닫아 왔다.
f = open("foo.txt", 'w')
f.write("Life is too short, you need python")
f.close()
# 파일을 열면 위와 같이 항상 close해 주는 것이 좋다.
# 하지만 이렇게 파일을 열고 닫는 것을 자동으로 처리할 수 있다면 편리하지 않을까?
# 파이썬의 with문이 바로 이런 역할을 해준다. 다음 예는 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 명령어를 사용해야 한다.
# ※ 모듈을 사용하고 만드는 방법에 대해서는 05장에서 자세히 다룰 것이다.
import sys

args = sys.argv[1:]
for i in args:
    print(i)
# 위 예는 입력받은 인수를 for문을 사용해 차례대로 하나씩 출력하는 예이다.
# sys모듈의 argv는 명령 창에서 입력한 인수를 의미한다.
# 즉 다음과 같이 입력했다면 argv[0]은 파일 이름  sys1.py가 되고 argv[1]부터는 뒤에 따라오는 인수가 차례로 argv의 요소가 된다.

# 간단한 스크립트를 하나 만들어 보자.
import sys
args = sys.argv[1:]
for i in args:
    print(i.upper(), end = ' ')
# 문자열 관련 함수인 upper()를 사용하여 명령 행에 입력된 소문자를 대문자로 바꾸어 주는 간단한 프로그램이다. 명령프롬포트차에서 다음과 같이 입력해 보자.
# ※ sys2.py 파일이 C:\doit 디렉터리 안에 있어야만 한다.
# C:\doit>python sys2.py life is too short, you need python
# 결과는 다음과 같다.
# LIFE IS TOO SHORT, YOU NEED PYTHON

# Review complete


파이썬 읽고 쓰기 리뷰의 핵심

  • 파일 생성하기
  • 파일을 쓰기 모드로 열어 출력값 적기
  • readline 함수 이용하기
  • readlines 함수 이용하기
  • read 함수 사용하기
  • 파일에 새로운 내용 추가하기
  •  with문과 함께 사용하기

파이썬 읽고 쓰기 리뷰를 하며 정리한 코드를 공유한다! 즐겁게 공부하자!
https://github.com/mgkim-developer/Python-Basic-Grammar/blob/main/(4-3)Read%20and%20write%20files.py

 

GitHub - mgkim-developer/Python-Basic-Grammar: Python Basic Grammar Study

Python Basic Grammar Study. Contribute to mgkim-developer/Python-Basic-Grammar development by creating an account on GitHub.

github.com

 

반응형