파이썬 응용 프로그램을 개발하는데 있어서 다른 유형의 파일을 가져와야 하는 경우가 종종 있습니다.
예를 들어 스팸 이메일을 분류하는 자연어 처리 애플리케이션을 개발하는 경우 스팸 이메일이 포함된 텍스트 파일을 사용하여 분류기 모델을 훈련해야 할 수 있습니다.
또한 CSV 파일에서 데이터를 읽고 CSV 파일에 데이터를 써야 할 수도 있습니다.
마지막으로 플랫 파일에 데이터를 읽고 쓰는 것 외에도 소켓을 사용하여 네트워크를 통해 데이터를 보내고 받아야 할 수도 있습니다.
파일 임포트
Python에서 파일 작업을 위해서 파일을 열어야 하는데 이때 사용하는 함수가 open()입니다.
open() 함수는 두 가지 속성을 전달해야 합니다. 열려는 파일의 경로와 파일을 오픈 할 모드입니다.
다음 표는 다양한 유형의 모드 값을 보여줍니다.
모드 | 설명 |
r | 오직 읽기모드로 파일을 엽니다. |
r+ | 읽고 쓰기 위해서 파일을 엽니다. |
rb | 바이너리 형식 파일을 읽습니다. |
rb+ | 바이너리 형식으로 읽고 쓰기 위해서 파일을 엽니다. |
w | 오직 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다. |
wb | 바이너리 형식으로 쓰기위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다. |
wb+ | 바이너리 형식으로 읽거나 쓰기 위해서 파일을 엽니다. 동일한 파일이 존재하면 덮어씌웁니다. |
a | 파일의 끝에 내용을 추가하기 위해서 파일을 엽니다. |
a+ | 내용을 추가하고 읽을 수 있도록 파일을 엽니다. |
ab | 바이너리 형식으로 내용을 추가하기 위해서 파일을 엽니다. |
ab+ | 바이너리 형식으로 내용을 추가하고 읽을 수 있도록 파일을 엽니다. |
다음 스크립트는 읽고 쓸 수 있는 간단한 텍스트 파일을 엽니다. open() 함수에 의해 반환된 객체 유형을 출력합니다. 파일에 따라 open() 함수는 파일에서 다양한 유형의 작업을 수행하는 데 사용할 수 있는 객체를 반환합니다.
file_handle_text = open("E:/Data/ex_text.txt", "r+")
type(file_handle_text)
Output:
_io.TextIOWrapper
같은 방법으로 워드 파일과 pdf 파일을 열 수 있습니다.
file_handle_word = open("E:/Data/ex_text.doc", "r+")
type(file_handle_word)
Output:
_io.TextIOWrapper
file_handle_pdf = open("E:/Data/ex_text.pdf", "r+")
type(file_handle_pdf)
Output:
_io.TextIOWrapper
open()함수에서 리턴 된 파일 객체는 name, mode 및 closed를 사용하여 경로 이름, 파일 모드 및 파일 닫힘 여부를 확인할 수 있습니다.
print(file_handle_pdf.name)
print(file_handle_pdf.mode)
print(file_handle_pdf.closed)
Output:
E:/Data/ex_text.pdf
r+
False
파일을 연 후에는 다른 응용 프로그램에서 액세스할 수 있도록 닫아야 합니다. 파일을 닫으려면 closed() 메서드를 호출해야 합니다.
file_handle_pdf.close()
print(file_handle_pdf.closed)
Output:
True
Text 파일 읽기
Python으로 텍스트 파일을 읽으려면 먼저 읽기 권한으로 파일을 연 다음 파일 핸들러 객체를 사용하여 read() 메서드를 호출해야 합니다.
ex_text.txt 파일을 열어보면 다음과 같습니다.
hello there
Welcome to Python.
You will learn Python.
다음 스크립트는 "ex_text.txt"라는 파일을 읽습니다.
file_handle_text = open("E:/Data/ex_text.txt", "r+")
file_content = file_handle_text.read()
print(file_content)
출력은 파일에 세 줄의 텍스트가 포함되어 있음을 보여줍니다.
hello there
Welcome to Python.
You will learn Python.
전체 파일을 읽는 대신 파일을 부분적으로 읽을 수도 있습니다.
예를 들어, 텍스트 파일에서 특정 수의 문자를 읽으려면 아래와 같이 매개변수 값으로 문자 수를 read() 함수에 전달해야 합니다.
file_handle_text = open("E:/Data/ex_text.txt", "r+")
file_content = file_handle_text.read(20)
print(file_content)
Output:
hello there
Welcome
마지막으로 readline() 함수를 사용하여 파일을 한 라인씩 읽을 수도 있습니다. 라인 읽기 함수는 모든 라인을 읽을 때까지 텍스트의 다음 줄을 반환하는 반복기입니다. 다음은 readline() 함수의 예입니다.
file_handle_text = open("E:/Data/ex_text.txt", "r+")
file_line1 = file_handle_text.readline()
file_line2 = file_handle_text.readline()
print(file_line1)
print(file_line2)
file_handle_text.close()
Output:
hello there
Welcome to Python.
명시적으로 close() 함수를 호출하지 않고도 파일을 열고, 일부 작업을 수행하고, 파일을 닫을 수 있는 특별한 코드가 있습니다.
with 키워드 open 함수 as 키워드 파일 개체 이름
with 블록 내에서 파일 개체 이름을 사용하여 파일에 대한 작업을 수행할 수 있습니다.
with open("E:/Data/ex_text.txt", "r+") as file_handle_text:
file_content = file_handle_text.read()
print(file_content)
Output:
hello there
Welcome to Python.
You will learn Python.
Text 파일 생성과 쓰기
텍스트 파일을 만들기 전에 기존 파일에 텍스트를 쓰는 방법을 알아보겠습니다.
기존 파일에 추가로 텍스트를 추가하려면 파일 오픈 모드를 'a'로 하고 파일을 열어야 합니다.
다음으로 기존 텍스트 끝에 텍스트를 작성하려면 write() 메서드를 호출하면 됩니다. 추가할 텍스트는 write() 메서드에 매개변수로 전달됩니다.
file_handle_text = open("E:/Data/ex_text.txt", "a")
file_handle_text.write("This line is appended to the existing file.")
file_handle_text.close()
이제 ex_text.txt 파일의 내용을 출력하면 출력에 새로 추가된 행이 표시됩니다.
file_handle_text = open("E:/Data/ex_text.txt", "r")
file_content = file_handle_text.read()
print(file_content)
Output:
hello there
Welcome to Python.
You will learn Python.
This line is appended to the existing file.
마지막으로 새 파일을 생성하려면 파일 경로와 'w' 모드로 open 함수를 호출해야 합니다.
같은 이름의 파일이 존재하지 않으면 새로 파일을 생성하고 동일한 이름의 파일이 존재하면 파일 내용을 덮어씁니다.
file_handle_text = open("E:/Data/ex_text2.txt", "w")
file_handle_text.write("This line will overwrite the existing content or will be written in a new file.")
file_handle_text.close()
'프로그래밍 언어 > 파이썬 (Python)' 카테고리의 다른 글
[파이썬 학습] 디렉토리 및 소켓전송 (0) | 2022.02.18 |
---|---|
[파이썬 학습] CSV, PDF 파일 읽기와 쓰기 (0) | 2022.02.17 |
[파이썬 학습] 예외처리 (0) | 2022.02.15 |
[파이썬 학습] 오버로딩과 오버라이딩 (0) | 2022.02.14 |
[파이썬 학습] 클래스 상속 관계 (0) | 2022.02.13 |