Akashic Records

파일 읽고 쓰기(pathlib) 본문

Python for Beginners

파일 읽고 쓰기(pathlib)

Andrew's Akashic Records 2024. 5. 29. 13:30
728x90

 

기본적인 파일 읽기 및 쓰기

파이썬에서 파일을 읽는 read() 메서드와 read_text() 메서드는 유사한 기능을 수행하지만 사용 방법과 관련된 몇 가지 주요 차이점이 있습니다.

  1. read() 메서드:
    • read() 메서드는 Python의 내장 함수 open()을 사용하여 얻은 파일 객체에서 호출됩니다. 이 메서드는 파일의 내용을 문자열로 읽어들입니다.
    • 파일을 열 때 open() 함수를 사용해야 하며, 이 과정에서 파일 모드(읽기, 쓰기 등), 인코딩 등을 직접 지정할 수 있습니다.
    • 사용 예:
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print(content)

 

  1. read_text() 메서드:
    • read_text() 메서드는 pathlib 모듈의 Path 객체에서 사용할 수 있습니다. 이 모듈은 파일 시스템 경로를 객체 지향적으로 쉽게 다룰 수 있게 해 주며, 파일을 열고 읽는 작업을 한 번에 할 수 있습니다.
    • Path 객체를 사용하면 open() 함수를 직접 호출하지 않고도 파일의 내용을 쉽게 읽을 수 있으며, 인코딩을 지정할 수도 있습니다.
    • 사용 예: 
from pathlib import Path

path = Path('example.txt')
content = path.read_text(encoding='utf-8')
print(content)

 

요약:

read()는 전통적인 파일 핸들링 방식으로 사용되며 파일 객체를 직접 관리해야 합니다. 반면, read_text()pathlib 모듈을 사용하여 좀 더 현대적이고 간결한 코드로 파일의 내용을 읽을 수 있게 해 줍니다. 두 메서드 모두 비슷한 결과를 반환하지만, pathlib을 사용하는 것이 특히 파일 경로와 관련된 작업을 할 때 더 편리할 수 있습니다.

 

디렉토리와 파일 조작

pathlib 모듈은 파일 시스템 경로를 객체 지향적으로 다루기 위한 유용한 라이브러리입니다. 이 모듈을 사용하면 파일과 디렉토리에 대한 경로를 쉽게 조작하고, 파일을 읽고 쓰는 작업을 간단히 처리할 수 있습니다. 다음은 pathlib의 몇 가지 기본적인 사용 예제입니다.

 

디렉토리 내의 파일 목록 가져오기:

from pathlib import Path

# 디렉토리 경로 설정 
dir_path = Path('some_directory') 

# 디렉토리 내 모든 파일 및 폴더 목록 출력 
for item in dir_path.iterdir(): 
	print(item)

 

특정 패턴과 일치하는 파일 찾기:

from pathlib import Path

# 디렉토리 경로 설정
dir_path = Path('some_directory')

# 특정 패턴을 가진 파일 찾기 (예: 모든 텍스트 파일)
for file in dir_path.glob('*.txt'):
    print(file)

 

파일 및 디렉토리 존재 여부 확인:

from pathlib import Path

# 디렉토리 경로 설정
dir_path = Path('some_directory')

# 특정 패턴을 가진 파일 찾기 (예: 모든 텍스트 파일)
for file in dir_path.glob('*.txt'):
    print(file)

 

pathlib 모듈은 이와 같이 파일과 디렉토리를 쉽게 다룰 수 있는 다양한 메서드를 제공합니다. 이를 통해 파일 시스템 관련 작업을 보다 직관적이고 효율적으로 수행할 수 있습니다.

 

Path Class 사용 예시

pathlibPath 객체를 사용하여 파일 시스템의 경로를 객체 지향적으로 처리하는 몇 가지 예제 코드를 소개하겠습니다. 이 예제들은 파일과 디렉토리를 생성, 수정, 검사 및 조작하는 방법을 보여줍니다.

 

1. 파일과 디렉토리 생성하기

from pathlib import Path

# 새 디렉토리 생성
dir_path = Path('new_directory')
dir_path.mkdir(exist_ok=True)  # exist_ok=True는 디렉토리가 이미 존재할 경우 오류를 방지합니다.

# 새 파일 생성
file_path = dir_path / 'new_file.txt'  # 디렉토리 경로와 파일명을 조합
file_path.touch(exist_ok=True)  # 파일이 이미 존재하면 오류를 방지합니다.

 

2. 파일에 쓰기 및 읽기

# 파일에 텍스트 쓰기
file_path.write_text('Hello, World!', encoding='utf-8')

# 파일 읽기
content = file_path.read_text(encoding='utf-8')
print(content)

 

3. 파일 및 디렉토리 정보 가져오기

# 파일 크기 가져오기
print(f"File size: {file_path.stat().st_size} bytes")

# 파일의 절대 경로 출력
print(f"Absolute path: {file_path.resolve()}")

 

4. 파일과 디렉토리 삭제하기

# 파일 삭제
file_path.unlink(missing_ok=True)  # missing_ok=True는 파일이 존재하지 않을 경우 오류를 방지합니다.

# 디렉토리 삭제
dir_path.rmdir()  # 디렉토리가 비어 있어야 삭제가 가능합니다.

 

5. 파일 경로 조작 및 정보 확인

from pathlib import Path

# 경로 설정
path = Path('/users/example/docs/report.txt')

# 부모 디렉토리 출력
print(f"Parent: {path.parent}")

# 파일 확장자 출력
print(f"Suffix: {path.suffix}")

# 파일명만 출력 (확장자 포함)
print(f"Name: {path.name}")

# 파일명만 출력 (확장자 제외)
print(f"Stem: {path.stem}")

Path 객체의 메서드를 이용하면 파일 시스템에 대한 다양한 작업을 간편하게 처리할 수 있습니다. 각 메서드는 특정 작업을 수행하도록 설계되어 있으며, 이를 조합하여 복잡한 파일 시스템 작업을 쉽게 구현할 수 있습니다.

 

파일쓰기

파이썬에서 파일을 저장하는 방법에는 여러 가지가 있습니다. 여기에서는 open() 함수를 사용한 기본적인 방법과 pathlib 모듈을 이용한 현대적인 방법을 소개하겠습니다. 두 가지 예제 모두 텍스트 파일을 생성하고 내용을 저장하는 방법을 보여줍니다.

 

1. open() 함수를 사용한 파일 쓰기

이 방법은 전통적인 파일 핸들링 방식입니다. 파일을 쓰기 모드로 열고, 원하는 내용을 파일에 씁니다.

# 파일명 지정
filename = 'example.txt'

# 파일 쓰기 모드로 열기
with open(filename, 'w', encoding='utf-8') as file:
    # 파일에 내용 쓰기
    file.write("Hello, Python!\n")
    file.write("파일 저장 예제입니다.\n")

# 파일이 자동으로 닫힙니다 (with 블록을 사용했기 때문에)
print(f"{filename}에 내용을 저장했습니다.")

 

2. pathlib 모듈을 사용한 파일 쓰기

pathlib 모듈을 사용하면 경로를 객체로 취급하고 메서드를 통해 파일에 쉽게 쓸 수 있습니다. 이 방법은 보다 현대적인 접근 방식이며 코드가 간결해집니다.

from pathlib import Path

# 파일 경로 설정
file_path = Path('example.txt')

# 파일에 텍스트 쓰기
file_path.write_text("Hello, pathlib!\n파일 저장 예제입니다.", encoding='utf-8')

# 저장 완료 메시지
print(f"{file_path}에 내용을 저장했습니다.")

두 예제 모두 파일을 새로 생성하거나 기존 파일에 덮어씌워 내용을 저장합니다. write() 메서드와 write_text() 메서드는 파일이 없으면 새로 생성하고, 파일이 이미 존재한다면 내용을 덮어씁니다. 추가적으로 내용을 더하고 싶다면, 파일을 열 때 'append' 모드 ('a')를 사용하면 됩니다.

 

여러 줄을 파일에 저장하기(pathlib)

from pathlib import Path

# 파일 경로 설정
file_path = Path('example.txt')

# 여러 줄의 텍스트를 리스트로 준비
lines = [
    "첫 번째 줄입니다.",
    "두 번째 줄입니다.",
    "세 번째 줄입니다."
]

# 리스트의 각 문자열을 하나의 문자열로 결합
content = "\n".join(lines)

# 파일에 텍스트 쓰기
file_path.write_text(content, encoding='utf-8')

# 저장 완료 메시지
print(f"{file_path}에 여러 줄의 내용을 저장했습니다.")

이 코드는 세 줄의 텍스트를 lines 리스트에 저장하고, "\n".join(lines)를 사용하여 이 리스트를 개행 문자로 구분된 하나의 문자열로 변환합니다. 그 후, write_text() 메서드로 이 문자열을 파일에 저장합니다. write_text() 메서드는 파일이 이미 존재하면 기존 내용을 덮어씌우고, 파일이 없다면 새로 생성합니다.

 

이진파일 쓰기(pathlib)

이 방식은 텍스트 데이터를 효율적으로 파일에 저장하는 간단하고 깔끔한 방법을 제공합니다.

pathlib 모듈을 사용하여 이진 파일을 읽고 쓰는 작업은 read_bytes()write_bytes() 메서드를 사용하여 수행할 수 있습니다. 이진 파일은 텍스트가 아닌 데이터(예: 이미지, 비디오, 실행 파일 등)를 포함하며, 이를 처리할 때는 텍스트와 달리 인코딩 없이 바이트 단위로 직접 다룹니다.

 

이진 파일 쓰기

이 예제에서는 바이트 데이터를 이진 파일에 쓰는 방법을 보여줍니다. 예를 들어, 간단한 바이트 배열을 파일에 저장해보겠습니다.

from pathlib import Path

# 파일 경로 설정
file_path = Path('example.bin')

# 이진 데이터
binary_data = bytes([0x00, 0x01, 0x02, 0x03, 0x04])

# 파일에 이진 데이터 쓰기
file_path.write_bytes(binary_data)

# 저장 완료 메시지
print(f"{file_path}에 이진 데이터를 저장했습니다.")

 

이진 파일 읽기

저장된 이진 파일을 다시 읽는 방법을 보여줍니다.

from pathlib import Path

# 파일 경로 설정
file_path = Path('example.bin')

# 파일에서 이진 데이터 읽기
binary_data_read = file_path.read_bytes()

# 읽은 데이터 출력
print(f"읽은 이진 데이터: {list(binary_data_read)}")

위의 예제 코드는 먼저 간단한 바이트 배열을 example.bin 파일에 저장하고, 다시 그 파일을 읽어서 저장된 이진 데이터를 콘솔에 출력합니다. write_bytes()read_bytes() 메서드는 이진 파일 처리를 간단하게 만들어 주며, 텍스트 파일과는 다르게 인코딩을 지정할 필요가 없습니다.

 

파일 복사하고 옮기기

파이썬에서 파일을 복사하거나 이동하는 작업은 shutil 모듈을 사용하여 간단히 처리할 수 있습니다. shutil 모듈은 파일 및 디렉토리를 복사, 이동, 삭제 등의 고수준 연산을 제공합니다. 여기서는 파일을 복사하고 이동하는 예제를 제공하겠습니다.

파일 복사하기
파일을 복사하는 경우, shutil.copy() 또는 shutil.copy2() 함수를 사용할 수 있습니다. 이 두 함수의 차이는 copy2()가 메타데이터(예: 수정 시간)도 함께 복사한다는 점입니다.

import shutil
from pathlib import Path

# 원본 파일 경로
source_path = Path('original.txt')

# 복사할 파일 경로
destination_path = Path('copy.txt')

# 파일 복사
shutil.copy(source_path, destination_path)

print(f"{source_path}을 {destination_path}로 복사했습니다.")

 

파일 이동하기

파일을 다른 위치로 이동하거나 이름을 변경할 때는 shutil.move() 함수를 사용합니다. 이 함수는 파일을 목적지로 이동시키며 필요한 경우 이름을 변경할 수 있습니다.

import shutil
from pathlib import Path

# 원본 파일 경로
source_path = Path('original.txt')

# 이동할 파일 경로 (또는 새 파일명)
destination_path = Path('moved.txt')

# 파일 이동
shutil.move(source_path, destination_path)

print(f"{source_path}을 {destination_path}로 이동했습니다.")

 

이 예제들은 파일을 복사하고 이동하는 기본적인 방법을 보여줍니다. shutil 모듈을 사용하면 복잡한 파일 시스템 작업도 몇 줄의 코드로 간단하게 수행할 수 있습니다. 파일의 복사와 이동 작업 시에는 경로가 올바른지, 필요한 권한이 있는지 등을 미리 확인해야 합니다.

728x90
Comments