1

フォルダー (およびサブフォルダー) から Zip ファイルを作成しています。正常に動作し、新しい .zip ファイルも作成されますが、glob.glob の使用中に問題が発生しています。目的のフォルダー (ソース フォルダー) からすべてのファイルを読み取り、新しい zip ファイルに書き込みますが、問題は、サブディレクトリを追加しているが、サブディレクトリからファイルを追加していないことです。

ファイル名とパス、およびファイルタイプ (Zip または Tar) を選択するオプションをユーザーに提供しています。.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番目のコードは、フォルダー/サブフォルダー内にある場合でもすべてのファイルを取得し、新しい .zip ファイルを作成し、ディレクトリ構造なしでそれに書き込みます。メインフォルダーのディレクトリ構造を使用せず、メインディレクトリまたはサブディレクトリからすべてのファイルをその.zipファイルに書き込むだけです。

誰でも私を助けたり、提案したりできますか。使用する2番目のオプションよりもglob.globをお勧めします。

前もって感謝します。

よろしく、アカシュ

4

1 に答える 1

1

設計によるグロブは、サブディレクトリに展開されません。これは UNIX スタイルのパス規則に従い、展開について詳しくは、fnmatchのドキュメントを参照してください。サブディレクトリにアクセスしたい場合は、それをパスに追加する必要があります。この例では、すべてを 1 レベル下に取得します。

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()

Doug Hellman はここで優れた議論をしています。グロブのパターン機能を使用していない場合 (すべてのテキスト ファイルに *.txt、拡張子の前に数字があるすべてのテキスト ファイルに *[0-9].txt など)、os.walk ソリューションの方が優れていると思います。

于 2011-02-07T16:20:08.587 に答える