2016-10-02 1 views
-1

zipfileos을 사용하여 zip 파일에 폴더와 해당 내용을 모두 추가하는 python 스크립트를 작성하고 있습니다.TypeError : 유니 코드로 강제 변환 : 필요 문자열 또는 버퍼 필요, 루프 생성 방법

불행히도
z = ZipFile("mynewfile.zip", "w") 
z.write(os.walk(directory)) 
z.printdir() 
z.close() 

나는 오류가 발생 os.walk 사용할 때이 목록을 고려하고있는 것으로 나타났습니다 :이 오류에 둘러보고

TypeError: coercing to Unicode: need string or buffer, list found: how to create a loop 

을, 나는 각을 순환 루프를 필요가 있다고 생각 목록의 항목. 내 문제는 내 특정 요구에 대한 이전 답변을 번역하는 방법을 알아낼 수 없다는 것입니다. 예컨대 TypeError: coercing to Unicode: need string or buffer, list found

는 또한 발생할 수있는 동일한 오류가 발생

for root dirs files in os.walk(directory) 
    z.write(files) 

을 시도했습니다. 그러나

for root dirs files in os.walk(directory) 
    z.write(root) 

표시 모든 디렉토리 내의 폴더,하지만 파일을 사용

. 왜 이것이 목록에 포함되지 않는지 나는 잘 모르겠습니다.

저는이 두 가지 아이디어를 어떻게 든 결합해야한다고 생각합니다. 도움을 청하면 크게 도움이 될 것입니다.

+0

'files'가 목록이면, 왜 그 목록의 모든 요소를 ​​반복하는 두 번째 (내부) for 루프가 없습니까? (또한 게시 한 예제 중 실제로 유효한 구문이 없습니다.) – UnholySheep

답변

0

다음 코드는이를 수행해야합니다. 파일은 목록이므로 이 목록을 반복하고 zip 파일에 파일 이름을 쓰면됩니다. 아래의 코드에서 콘텍스트 관리자 with을 사용하고 있습니다. 수동으로 파일을 닫을 필요가 없습니다.

from zipfile import Zipfile 

for root, dirs, files in os.walk(directory): 
    for f in files: 
     with Zipfile('new_zip.zip', 'w') as z: 
      z.write(f) 
관련 문제