14

私は約3週間Pythonを学んでおり、現在、ファイル名に表示されるキーワードと日付でファイル(約10.000)をソートするための小さなスクリプトを作成しようとしています. 特定の日付より前のファイルをアーカイブに追加する必要があります。並べ替えは正常に機能しますが、アーカイブは機能しません

アーカイブを作成します-名前は問題ありません-しかし、アーカイブにはファイルへの完全なパスがあります。開くと、次のようになりますfolder1 -> folder2 -> folder3 -> files

アーカイブに構造全体ではなくファイルのみが含まれるように変更するにはどうすればよいですか?

以下は私のzip関数のスニペットnodeです。ファイルがソートされる前のパスでありfolder、名前のキーワードでソートされたファイルを含むサブフォルダーであり、items日付でソートされたファイルを含むフォルダーです。

私はPython 2.6を使用しています

def ZipFolder(node, zipdate):
    xynode = node + '/xy'
    yznode = node + '/yz'
    for folder in [xynode,yznode]:
        items = os.listdir(folder)
        for item in items:
            itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item)
            print item
            if itemdate[0] <= zipdate:
                arcname = str(item) + '.zip'
                x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED)
                files = os.listdir(folder + '/' + item)
                for f in files:
                    x.write(folder + '/' + item + '/' + f)
                    print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item)
                x.close()
                shutil.rmtree(folder + '/' + item)
    return

また、提案や改善を歓迎します。

4

1 に答える 1

20

ヘルプ (zip ファイル) から:

 |  write(self, filename, arcname=None, compress_type=None)
 |      Put the bytes from filename into the archive under the name
 |      arcname.

したがって、 write() 呼び出しを次のように変更してみてください。

x.write(folder + '/' + item + '/' + f, arcname = f)

あなたのコードについては、特に 3 週間の pythonist にとっては十分に良いように思えますが、いくつかのコメントは歓迎されました ;-)

于 2011-08-10T09:16:53.193 に答える