파이썬 파일 입출력: I/O 작업 마스터하기
이 장에서는 파이썬에서 사용할 수 있는 모든 기본 I/O 함수를 다룹니다. 더 많은 함수는 표준 파이썬 문서를 참조하세요.
화면 출력
출력을 생성하는 가장 간단한 방법은 0개 이상의 표현식을 쉼표로 구분하여 전달하는 print 문을 사용하는 것입니다. 이 함수는 전달된 표현식을 문자열로 변환하여 표준 출력에 결과를 씁니다.
#!/usr/bin/python
print("Python is really a great language,", "isn't it?")
이 코드는 표준 화면에 다음과 같은 결과를 출력합니다.
Python is really a great language, isn't it?
키보드 입력 읽기
파이썬은 표준 입력(기본적으로 키보드)에서 텍스트 한 줄을 읽는 두 가지 내장 함수를 제공합니다.
raw_input 함수
raw_input([prompt]) 함수는 표준 입력에서 한 줄을 읽어 문자열로 반환합니다(끝의 개행 문자 제거).
#!/usr/bin/python
str = raw_input("Enter your input: ")
print("Received input is : ", str)
이 코드는 문자열 입력을 요청하고 같은 문자열을 화면에 표시합니다. "Hello Python!"을 입력하면 출력은 다음과 같습니다.
Enter your input: Hello Python
Received input is : Hello Python
input 함수
input([prompt]) 함수는 raw_input과 동일하지만, 입력이 유효한 파이썬 표현식이라고 가정하고 평가된 결과를 반환합니다.
#!/usr/bin/python
str = input("Enter your input: ")
print("Received input is : ", str)
입력에 대한 결과는 다음과 같습니다.
Enter your input: [x*5 for x in range(2,10,2)]
Recieved input is : [10, 20, 30, 40]
파일 열기와 닫기
지금까지 표준 입출력을 읽고 썼습니다. 이제 실제 데이터 파일을 사용하는 방법을 살펴보겠습니다.
파이썬은 기본적으로 파일을 조작하는 데 필요한 기본 함수와 메서드를 제공합니다. 파일 객체를 사용하여 대부분의 파일 조작을 수행할 수 있습니다.
open 함수
파일을 읽거나 쓰려면 파이썬의 내장 open() 함수를 사용하여 열어야 합니다. 이 함수는 파일 객체를 생성하며, 이를 사용하여 관련된 다른 지원 메서드를 호출할 수 있습니다.
구문
file object = open(file_name [, access_mode][, buffering])
매개변수 세부 정보는 다음과 같습니다.
file_name - 접근하려는 파일의 이름을 포함하는 문자열 값입니다.
access_mode - 파일을 열 모드(읽기, 쓰기, 추가 등)를 결정합니다. 가능한 값의 전체 목록은 아래 표에 나와 있습니다. 이 매개변수는 선택 사항이며 기본 파일 접근 모드는 읽기(r)입니다.
buffering - 버퍼링 값이 0이면 버퍼링이 수행되지 않습니다. 값이 1이면 파일에 접근할 때 라인 버퍼링이 수행됩니다. 1보다 큰 정수를 지정하면 지정된 버퍼 크기로 버퍼링이 수행됩니다. 음수이면 시스템 기본값(기본 동작)입니다.
파일을 여는 다양한 모드 목록은 다음과 같습니다.
| 번호 |
모드 및 설명 |
| 1 |
r 읽기 전용으로 파일을 엽니다. 파일 포인터는 파일의 시작 부분에 위치합니다. 이것이 기본 모드입니다. |
| 2 |
rb 바이너리 형식으로 읽기 전용으로 파일을 엽니다. 파일 포인터는 파일의 시작 부분에 위치합니다. 이것이 기본 모드입니다. |
| 3 |
r+ 읽기와 쓰기 모두로 파일을 엽니다. 파일 포인터는 파일의 시작 부분에 위치합니다. |
| 4 |
rb+ 바이너리 형식으로 읽기와 쓰기 모두로 파일을 엽니다. 파일 포인터는 파일의 시작 부분에 위치합니다. |
| 5 |
w 쓰기 전용으로 파일을 엽니다. 파일이 존재하면 덮어씁니다. 파일이 없으면 쓰기용 새 파일을 만듭니다. |
| 6 |
wb 바이너리 형식으로 쓰기 전용으로 파일을 엽니다. 파일이 존재하면 덮어씁니다. 파일이 없으면 쓰기용 새 파일을 만듭니다. |
| 7 |
w+ 쓰기와 읽기 모두로 파일을 엽니다. 파일이 존재하면 기존 파일을 덮어씁니다. 파일이 없으면 읽기/쓰기용 새 파일을 만듭니다. |
| 8 |
wb+ 바이너리 형식으로 쓰기와 읽기 모두로 파일을 엽니다. 파일이 존재하면 기존 파일을 덮어씁니다. 파일이 없으면 읽기/쓰기용 새 파일을 만듭니다. |
| 9 |
a 추가 모드로 파일을 엽니다. 파일이 존재하면 파일 포인터는 파일의 끝에 위치합니다. 파일이 없으면 쓰기용 새 파일을 만듭니다. |
| 10 |
ab 바이너리 형식으로 추가 모드로 파일을 엽니다. 파일이 존재하면 파일 포인터는 파일의 끝에 위치합니다. 파일이 없으면 쓰기용 새 파일을 만듭니다. |
| 11 |
a+ 추가와 읽기 모두로 파일을 엽니다. 파일이 존재하면 파일 포인터는 파일의 끝에 위치합니다. 파일이 없으면 읽기/쓰기용 새 파일을 만듭니다. |
| 12 |
ab+ 바이너리 형식으로 추가와 읽기 모두로 파일을 엽니다. 파일이 존재하면 파일 포인터는 파일의 끝에 위치합니다. 파일이 없으면 읽기/쓰기용 새 파일을 만듭니다. |
file 객체 속성
파일이 열리고 file 객체가 생기면 해당 파일과 관련된 다양한 정보를 얻을 수 있습니다.
파일 객체와 관련된 모든 속성 목록은 다음과 같습니다.
| 번호 |
속성 및 설명 |
| 1 |
file.closed 파일이 닫혀 있으면 true, 그렇지 않으면 false를 반환합니다. |
| 2 |
file.mode 파일이 열린 접근 모드를 반환합니다. |
| 3 |
file.name 파일 이름을 반환합니다. |
| 4 |
file.softspace print에 공백이 명시적으로 필요하면 false, 그렇지 않으면 true를 반환합니다. |
예제
#!/usr/bin/python
# 파일 열기
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
print("Closed or not : ", fo.closed)
print("Opening mode : ", fo.mode)
print("Softspace flag : ", fo.softspace)
이 코드는 다음과 같은 결과를 출력합니다.
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
close() 메서드
file 객체의 close() 메서드는 쓰이지 않은 정보를 플러시하고 파일 객체를 닫으며, 이후에는 더 이상 쓰기를 할 수 없습니다.
파이썬은 파일의 참조 객체가 다른 파일에 재할당되면 자동으로 파일을 닫습니다. close() 메서드를 사용하여 파일을 닫는 것이 좋은 습관입니다.
구문
fileObject.close()
예제
#!/usr/bin/python
# 파일 열기
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
# 열린 파일 닫기
fo.close()
이 코드는 다음과 같은 결과를 출력합니다.
Name of the file: foo.txt
파일 읽기와 쓰기
file 객체는 우리의 작업을 쉽게 만드는 접근 메서드 세트를 제공합니다. read()와 write() 메서드를 사용하여 파일을 읽고 쓰는 방법을 살펴보겠습니다.
write() 메서드
write() 메서드는 열려 있는 파일에 문자열을 씁니다. 파이썬 문자열은 텍스트뿐만 아니라 바이너리 데이터도 가질 수 있다는 점에 유의하세요.
write() 메서드는 문자열 끝에 개행 문자('\n')를 추가하지 않습니다.
구문
fileObject.write(string)
여기서 전달된 매개변수는 열린 파일에 쓸 내용입니다.
예제
#!/usr/bin/python
# 파일 열기
fo = open("foo.txt", "wb")
fo.write("Python is a great language.\nYeah its great!!\n")
# 열린 파일 닫기
fo.close()
이 메서드는 foo.txt 파일을 생성하고 해당 파일에 주어진 내용을 쓴 후 파일을 닫습니다. 이 파일을 열면 다음과 같은 내용이 있습니다.
Python is a great language.
Yeah its great!!
read() 메서드
read() 메서드는 열린 파일에서 문자열을 읽습니다. 텍스트 데이터 외에 파이썬 문자열은 바이너리 데이터를 가질 수 있다는 점에 유의하세요.
구문
fileObject.read([count])
여기서 전달된 매개변수는 열린 파일에서 읽을 바이트 수입니다. 이 메서드는 파일 시작부터 읽기를 시작하며, count가 없으면 가능한 한 많이 읽으려고 시도합니다(파일 끝까지).
예제
위에 생성한 foo.txt 파일을 예로 들어보겠습니다.
#!/usr/bin/python
# 파일 열기
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# 열린 파일 닫기
fo.close()
이 코드는 다음과 같은 결과를 출력합니다.
Read String is : Python is
파일 위치
tell() 메서드는 파일 내 현재 위치를 알려줍니다. 즉, 다음 읽기 또는 쓰기가 파일 시작부터 몇 바이트 지점에서 발생할지 나타냅니다.
seek(offset[, from]) 메서드는 현재 파일 위치를 변경합니다. offset 인수는 이동할 바이트 수를 나타냅니다. from 인수는 바이트를 이동할 기준 위치를 지정합니다.
from이 0으로 설정되면 파일 시작을 기준 위치로 사용하고, 1이면 현재 위치를 기준 위치로 사용하며, 2로 설정되면 파일 끝을 기준 위치로 사용합니다.
예제
위에 생성한 foo.txt 파일을 예로 들어보겠습니다.
#!/usr/bin/python
# 파일 열기
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
# 현재 위치 확인
position = fo.tell()
print("Current file position : ", position)
# 포인터를 다시 처음으로 이동
position = fo.seek(0, 0)
str = fo.read(10)
print("Again read String is : ", str)
# 열린 파일 닫기
fo.close()
이 코드는 다음과 같은 결과를 출력합니다.
Read String is : Python is
Current file position : 10
Again read String is : Python is
파일 이름 변경 및 삭제
파이썬 os 모듈은 파일 이름 변경 및 삭제와 같은 파일 처리 작업을 수행하는 메서드를 제공합니다.
이 모듈을 사용하려면 먼저 임포트한 다음 관련 함수를 호출하면 됩니다.
rename() 메서드
rename() 메서드는 현재 파일 이름과 새 파일 이름이라는 두 개의 인수를 받습니다.
구문
os.rename(current_file_name, new_file_name)
예제
기존 파일 test1.txt의 이름을 변경하는 예제입니다.
#!/usr/bin/python
import os
# test1.txt에서 test2.txt로 파일 이름 변경
os.rename("test1.txt", "test2.txt")
remove() 메서드
삭제할 파일 이름을 인수로 제공하여 remove() 메서드로 파일을 삭제할 수 있습니다.
구문
os.remove(file_name)
예제
기존 파일 test2.txt를 삭제하는 예제입니다.
#!/usr/bin/python
import os
# test2.txt 파일 삭제
os.remove("text2.txt")
파이썬 디렉터리
모든 파일은 다양한 디렉터리 내에 있으며, 파이썬은 이를 처리하는 데 아무런 문제가 없습니다. os 모듈에는 디렉터리 생성, 삭제, 변경을 돕는 여러 메서드가 있습니다.
mkdir() 메서드
os 모듈의 mkdir() 메서드를 사용하여 현재 디렉터리에 디렉터리를 만들 수 있습니다. 이 메서드에는 생성할 디렉터리 이름을 포함하는 인수를 제공해야 합니다.
구문
os.mkdir("newdir")
예제
현재 디렉터리에 test 디렉터리를 생성하는 예제입니다.
#!/usr/bin/python
import os
# "test" 디렉터리 생성
os.mkdir("test")
chdir() 메서드
현재 디렉터리를 변경하려면 chdir() 메서드를 사용합니다. chdir() 메서드는 현재 디렉터리로 만들고자 하는 디렉터리 이름을 인수로 받습니다.
구문
os.chdir("newdir")
예제
"/home/newdir" 디렉터리로 이동하는 예제입니다.
#!/usr/bin/python
import os
# 디렉터리를 "/home/newdir"로 변경
os.chdir("/home/newdir")
getcwd() 메서드
getcwd() 메서드는 현재 작업 디렉터리를 표시합니다.
구문
os.getcwd()
예제
현재 디렉터리를 확인하는 예제입니다.
#!/usr/bin/python
import os
# 현재 디렉터리 위치 반환
os.getcwd()
rmdir() 메서드
rmdir() 메서드는 메서드의 인수로 전달된 디렉터리를 삭제합니다.
디렉터리를 제거하기 전에 그 안의 모든 내용을 제거해야 합니다.
구문
os.rmdir('dirname')
예제
"/tmp/test" 디렉터리를 제거하는 예제입니다. 디렉터리의 정규화된 이름을 제공해야 하며, 그렇지 않으면 현재 디렉터리에서 해당 디렉터리를 검색합니다.
#!/usr/bin/python
import os
# "/tmp/test" 디렉터리 제거
os.rmdir("/tmp/test")
파일 및 디렉터리 관련 메서드
Windows와 Unix 운영 체제에서 파일 및 디렉터리를 처리하고 조작하는 다양한 유틸리티 메서드를 제공하는 세 가지 중요한 소스가 있습니다.