티스토리
개요
tar.gz 파일을 윈도우 알집 프로그램으로 보면 파일의 끝이 열리지 않는 에러 메세지가 뜨지만, 파일들의 목록도 보이고 압축은 풀린다.
python의 tarfile 라이브러리로 파일을 열면 Readfile error 와 eof error 이 생기는데, 에러가 생겨도 파일을 읽고 풀수 있는 방법을 알아 보자.
파일의 끝이나 읽기 에러가 발생했을 때도 tarfile 라이브러리를 사용하여 압축 파일 내용을 읽고 압축을 해제할 수 있는 방법은, 에러를 무시하면서 파일을 열고 처리하는 것입니다. 이를 위해서는 먼저 파일을 열 때 ignore_errors=True 파라미터를 사용할 수 없음에 유의해야 합니다. 대신, try-except 블록을 사용하여 에러를 포착하고, 에러가 발생하더라도 프로세스를 계속 진행할 수 있게 합니다.
아래의 코드는 EOFError와 ReadError를 처리하는 방법을 보여줍니다. 이 코드는 압축 파일을 열고, 에러가 발생할 경우 이를 캐치하고, 가능한 모든 파일을 압축 해제합니다. 에러가 발생하더라도 가능한 모든 파일이 압축 해제될 때까지 진행됩니다.
py7zr로 .7z와 함께 사용하는 방법은 아래 글 참조 바랍니다. https://costzerocode.tistory.com/87 |
1.코드리뷰
tarfile 모듈의 open 함수를 사용할 때 mode 매개변수를 'r:*'로 설정하여 transparent compression을 사용하는 것이 추천됩니다.
이는 gzip, bzip2, lzma 압축된 파일을 투명하게 읽을 수 있게 해주며, 자동으로 적절한 압축 해제 방법을 선택합니다. 또한, 파일을 열 때 발생할 수 있는 ReadError 또는 CompressionError를 처리하기 위해 예외 처리 구문을 사용합니다.
import tarfile
try:
# 'r:*' 모드는 압축 형식을 자동으로 감지하여 읽기를 시도합니다.
with tarfile.open('your_file.tar.gz', 'r:*') as tar:
tar.extractall(path="extracted_files")
for member in tar.getmembers():
print(member.name)
except tarfile.ReadError as e:
print(f"파일을 읽는 중 에러 발생: {e}")
except tarfile.CompressionError as e:
print(f"압축 해제 중 에러 발생: {e}")
이 코드는 지정된 tar.gz 파일을 열고, try-except 블록을 사용하여 파일을 읽거나 압축을 해제하는 과정에서 발생할 수 있는 에러를 처리합니다. tarfile.open의 'r:*' 모드는 파일의 압축 방식을 자동으로 감지하고 해제하여, gzip, bzip2, lzma 압축된 파일을 투명하게 처리할 수 있게 해줍니다.
이렇게 하면 다양한 압축 포맷의 파일을 보다 유연하게 처리할 수 있습니다.
2. 코드리뷰
import tarfile
def extract_tarfile_ignore_errors(filename, extract_path="."):
try:
# 압축 파일 열기
with tarfile.open(filename, 'r:*') as tar:
# 가능한 모든 멤버 추출
for member in tar.getmembers():
try:
tar.extract(member, path=extract_path)
except (tarfile.TarError, EOFError) as e:
print(f"{member.name} 추출 중 오류 발생: {e}")
continue
except (tarfile.ReadError, EOFError) as e:
print(f"파일 열기 실패: {e}")
# 실제 파일 경로로 'your_file.tar.gz'를 교체하세요.
extract_tarfile_ignore_errors('your_file.tar.gz', 'extracted_files')
이 스크립트는 파일을 열 때 발생할 수 있는 ReadError와 멤버별로 압축 해제할 때 발생할 수 있는 EOFError 및 tarfile.TarError를 처리합니다. 각 멤버를 압축 해제할 때 에러가 발생하면, 그 멤버는 건너뛰고 다음 멤버로 넘어갑니다. 이 방법을 통해, 파일의 끝에 도달하거나 읽을 수 없는 부분이 있더라도 가능한 많은 파일을 추출할 수 있습니다.
마무리
- 이번 포스팅은 tar.gz 압축풀때 tarfile의 사용 방법에 대해 알아봤습니다.
py7zr을 사용하여 .7z와 함께 사용하는 방법은 아래 글 참조 바랍니다.
https://costzerocode.tistory.com/87
궁금한 사항은 lution2@gmail.com로 문의사항 주시면 답변 드리겠습니다.
감사합니다.
'PYTHON 파이썬' 카테고리의 다른 글
1000.00 태국 바트 환율 계산 파이썬 코드로 만들어보자~ (0) | 2024.03.31 |
---|---|
파이썬 EXE 파일 만들기 (0) | 2024.03.29 |
Github 에서 폴더명 생성하는 방법 (0) | 2024.03.23 |
파이썬 py7zr 라이브러리의 7z 압축파일 사용 방법 (1) | 2024.03.22 |
파이썬 python 파이참 pycharm 설치 하기 (0) | 2024.03.19 |