[python] OSError: [Errno 63] File name too long 해결 Method

반응형
개발 환경 - device : 2021 Macbook Pro M1 Pro 14inch(맥북프로 14 M1 Pro 모델) - OS : macOS Ventura 13.2
⚠️
본 포스팅은 저의 개인적 생각을 기반으로 작성되었습니다. 따라서 정답이 아닌, 에러 해결을 위한 하나의 과정으로서 참고하시길 바랍니다. *수정이 필요한 부분이 있을 경우, 댓글로 알려 주시면 수정하도록 하겠습니다😄

📌 에러 내용 및 상황

  • zip파일의 압축을 해제하기 위해서, zip.extractall(zip_folder) 기능을 사용하고 있음
  • 그런데 압축 폴더명도 길고, 파일명도 길어서 아래의 에러가 발생하고 있음
OSError: [Errno 63] File name too long: {파일경로}/{파일명.zip}

👿 원인

  • 위 에러는 python에서 파일 경로와 파일 이름이 결합하여 너무 길어지는 경우 지나치게 긴 경우 발생함
  • 대부분의 운영 체제에서는 파일 이름의 최대 길이를 제한하고 있으며, 이를 초과하면 파일 이름이 너무 길다는 오류를 발생시킴

🚨
::결론:: 너무 긴 파일명!

🤩 해결

파일명 혹은 파일 경로를 단축하여, 길지 않게 바꿔주면 된다. 다음은 파이썬에서 해결할 수 있도록 간단하게 작성해본 기능이다.

파이썬 코드

def modify_zip_filenames(zip_file_path):
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        for member in zip_ref.infolist():
            # 파일 이름이 255자를 초과하는지 확인
            if len(member.filename) > 255:
                # 파일 이름을 255자로 수정
                modified_filename = member.filename[:255]
                member.filename = modified_filename

            yield member, zip_ref

적용

def exportZip(download_dir='~/'):
    # zip 파일로 다운로드 한 경우 압축해제
    pages_zip = glob(get_dir(os.path.join(download_dir, 'Export*.zip')))
    for zip_fp in pages_zip:
        zip = zipfile.ZipFile(zip_fp)
        # 압축할 폴더 생성
        zip_folder = get_dir(os.path.join(download_dir, zip_fp.replace('.zip', '')))
        os.makedirs(zip_folder, exist_ok=True)

        # 압축 풀기
        for member, zip_ref in modify_zip_filenames(zip_fp):
            zip_ref.extract(member, zip_folder)

        # zip 파일 제거
        os.remove(zip_fp)

📖 레퍼런스

반응형

댓글

Designed by JB FACTORY