2010-05-24 3 views
1

폴더 (및 하위 폴더)에서 Zip 파일을 만듭니다. 그것은 잘 작동하고 또한 새로운 .zip 파일을 만듭니다 glob.glob 사용하는 동안 문제가 있습니다. 원하는 폴더 (원본 폴더)에서 모든 파일을 읽고 새 zip 파일에 쓰려고하지만 하위 디렉토리를 추가하지만 파일을 추가하지 않는 것이 문제입니다.glob.glob를 사용하여 Zip 파일을 생성 할 때 발생하는 문제

사용자에게 파일 이름과 경로 및 파일 형식 (우편 번호 또는 타사)을 선택할 수있는 옵션을 제공하고 있습니다. .tar.gz 파일을 만드는 동안 아무런 문제가 없지만 .zip 파일을 만들면이 문제가 발생합니다. 나는 아래의 코드를 사용하는 경우, 또한

for name in (Source_Dir): 
    for name in glob.glob("/path/to/source/dir/*"): 
     myZip.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED) 

myZip.close() 

: 폴더/하위 폴더 내부에조차 경우 모든 파일을

for dirpath, dirnames, filenames in os.walk(Source_Dir): 
     myZip.write(os.path.join(dirpath, filename) os.path.basename(filename))   

myZip.close() 

이제 2 코드 TAKS를, 새로운를 만들고 여기에

내 코드입니다 .zip 파일을 만들고 디렉토리 구조없이 파일에 기록하십시오. 메인 폴더에 대해 dir 구조를 사용하지 않고 메인 dir 또는 subdir에서 모든 파일을 해당 .zip 파일로 작성하기 만합니다.

아무도 도와 주시거나 제안 해 주실 수 있습니까? 사용하는 두 번째 옵션보다는 glob.glob를 선호합니다.

미리 감사드립니다.

감사합니다, 디자인에 의해 아카 쉬

답변

1

글롭가 서브 디렉토리로 확장되지 않습니다. UNIX 스타일 경로 규칙을 따르고 확장하면 자세한 내용은 fnmatch 설명서를 참조하십시오. 하위 디렉토리로 이동하려면 경로에 추가해야합니다. 이 예제는 모든 것을 한 레벨 아래로 가져옵니다.

for name in (Source_Dir): 
    for name in glob.glob("/path/to/source/dir/*/*"): 
     myZip.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED) 

myZip.close() 

더그 헬먼은 훌륭한 토론 here 있습니다. glob의 패턴 기능 (예 : 모든 텍스트 파일의 경우 * .txt, 확장자 앞에 숫자가있는 모든 텍스트 파일의 경우 [0-9] .txt)을 사용하지 않는 경우 os.walk 솔루션이 더 좋습니다.

관련 문제