2016-10-02 10 views
-1

zipfileosの両方を使用して、フォルダとその内容をすべてzipファイルに追加するPythonスクリプトを作成しています。TypeError:Unicodeに強制する:必要な文字列またはバッファリストが見つかりました:ループを作成する方法

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) 

表示したディレクトリ内のすべてのフォルダ、ないファイルを使用して。なぜこれがリストに含まれないのか分かりません。

私は何とかこれらの2つのアイデアを組み合わせる必要があると思います。そのようにするとどんな助けがあっても大いに訴えられます。

+0

'files'がリストである場合、そのリストのすべての要素を繰り返し処理する2番目の(内側の)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) 
関連する問題