본문으로 건너뛰기

Python 파일 읽고 쓰기

파이썬에서 파일 생성, 열고 닫는 방법을 설명하고, 파일에 텍스트 등의 데이터를 읽고 쓰는 방법을 소개합니다.

1. 파일 생성 (Open, Close)

파일을 읽거나 쓰려면 먼저 파일을 열어야 합니다. open() 함수는 어떤 경로의 파일을 엽니다. 만약 파일이 존재하지 않으면 파일을 생성하고 엽니다. open() 함수는 인자로 파일 이름(경로)과 파일 접근 모드(Access mode)를 전달합니다.

  • open("File name", "Access mode")

아래 코드는 현재 작업 경로 아래에 "TextFile.txt"라는 이름으로 파일을 쓰기 모드로 엽니다. 쓰기 모드로 열면 파일에 텍스트 등의 데이터를 쓸 수 있습니다.

file = open("TextFile.txt", "w+");

아래 코드는 "TextFile.txt"라는 이름으로 파일을 읽기 모드로 엽니다. 열기 모드는 읽기만 가능하고 쓰기는 안됩니다.

file = open("TextFile.txt", "r");

아래와 같이 파일의 절대 경로를 입력하면 현재 디렉토리가 아닌, "/home/js/test/TextFile.txt"의 파일을 엽니다.

file = open("/home/js/test/TextFile.txt", "w+")

파일을 열어서 읽거나 쓰는 작업을 모두 마쳤다면, 아래와 같이 close()를 호출하여 파일을 닫아줘야 합니다.

file.close()

1.1 파일 접근 모드

파일 접근 모드를 정리하였습니다.

Access modeDescription
'r'Read only
'r+'Read and write. (파일이 없으면 에러 발생)
'w'Write only. (파일이 없으면 파일 생성)
'w+'Write and Read
'a'Append only (현재 파일에 데이터 추가)
'a+'Append and read

2. 파일 읽기 (Read)

파이썬 코드를 테스트하기 전에, /home/mjs/test/TextFile.txt 경로에 아래와 같은 파일을 저장하였습니다.

# /home/mjs/test/TextFile.txt
hello
python
world

2.1 readlines()으로 Line 단위 텍스트 읽기

readlines()는 파일에서 줄바꿈(new line)을 인식하여 1줄 씩 읽어 리스트에 저장하여 반환합니다.

아래 예제에서 텍스트 파일은 1줄 씩 분리되어 리스트에 저장되었습니다.

file = open("/home/mjs/test/TextFile.txt", "r")
strings = file.readlines()
print(strings)
file.close()

Output:

['hello\n', 'python\n', 'world']

2.2 readline()로 Line 단위 텍스트 읽기

readline()readlines()와 기능은 동일한데, 1줄만 읽어서 문자열로 리턴합니다.

readline()로 모든 텍스트를 읽으려면 아래와 같이 반복문을 사용해야 합니다. 문자열의 마지막에 줄바꿈(new line) 문자가 있기 때문에 출력하면 줄바꿈도 함께 출력됩니다.

file = open("/home/mjs/test/TextFile.txt", "r")
while True:
line = file.readline()
if not line:
break
print(line)

file.close()

Output:

hello

python

world

2.3 read()로 파일의 모든 내용 읽기

read()는 파일의 모든 내용을 읽고 문자열로 리턴합니다. 줄바꿈(\n)도 포함되기 때문에 출력하면 함께 표현됩니다.

file = open("/home/mjs/test/TextFile.txt", "r")
data = file.read()
print(data)
file.close()

Output:

hello
python
world

2.4 with로 파일 읽기

with 키워드를 사용하여 아래와 같이 파일을 읽을 수 있습니다. with 구문이 종료되면 with가 file.close()를 호출하기 때문에 명시적으로 close()를 호출할 필요가 없습니다. 코드도 간단해지고 실수로 close()를 호출하지 않는 일을 예방할 수 있습니다.

with open("/home/mjs/test/TextFile.txt", "r") as file:
strings = file.readlines()
print(strings)

3. 파일 쓰기 (Write)

write()는 인자로 전달된 문자열을 파일에 씁니다.

with open("/home/mjs/test/TextFile.txt", "w") as file:
file.write("Hello~ \n")
file.write("World!")

Output:

Hello~
World!

쓰기 모드("w")로 파일을 열면, 파일에 저장된 텍스트는 지워지고 새로 추가하는 텍스트만 저장이 됩니다. 기존 파일의 텍스트를 삭제하지 않고 추가하고 싶다면 추가 모드("a" 또는 "a+")를 사용하셔야 합니다.

3.1 writelines()로 파일 쓰기

writelines()는 List의 모든 요소들을 파일에 저장합니다.

str_list = ["hello\n", "python\n", "world"]
with open("/home/mjs/test/TextFile.txt", "w") as file:
file.writelines(str_list)

파일을 확인해보면 아래와 같이 보입니다.

hello
python
world

3.2 추가 모드(a)로 파일 쓰기

추가모드("a")는 append라는 의미로 파일을 쓸 때 기존 파일의 데이터를 지우지 않고 파일의 끝에 텍스트를 추가합니다.

현재 TextFile.txt 파일에 저장된 내용이 아래와 같을 때,

Hello~
World!

아래와 같은 코드를 실행하면 파일의 마지막에 새로운 텍스트가 추가됩니다.

with open("/home/mjs/test/TextFile.txt", "a") as file:
file.write("Hello~ \n")
file.write("World!")
file.close()

파일을 열어보면 아래와 같이 보입니다. (보기 좋게 하려면 줄바꿈을 추가하고 쓰거나, 이전에 파일을 저장할 때 줄바꿈을 추가하고 닫았어야 했습니다.)

Hello~
World!Hello~
World!