7

これは、主にここのヘルプからまとめたフォルダを圧縮するための既存のコードです。

#!/usr/bin/env python

import os
import sys
import datetime

now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M")
target_dir = '/var/lib/data'
temp_dir='/tmp'

zip = zipfile.ZipFile(os.path.join(temp_dir, now+".zip"), 'w', zipfile.ZIP_DEFLATED)
rootlen = len(target_dir) + 1
for base, dirs, files in os.walk(target_dir):
   for file in files:
      fn = os.path.join(base, file)
      zip.write(fn, fn[rootlen:])

操作の最後に作成したzipファイルを削除したい場合、最適なコマンドはこれでしょうか?

os.remove.join(temp_dir, now+".zip")
4

3 に答える 3

10

os.remove(os.path.join(temp_dir, now + ".zip"))大丈夫でしょう。

ただし、必要なすべての場合に適切に実行されるようにする必要があります。

いずれにせよ削除する場合は、次のことができます

create it
try:
    work with it
finally:
    remove it

ただし、この場合、次のtempfileモジュールを使用することもできます。

import tempfile
with tempfile.NamedTemporaryFile(suffix='.zip') as t:
    z = zipfile.ZipFile(t.name, 'w') # re-create it
    do stuff with z
# after the with clause, the file is gone.

ただし、特別な状況 (成功時、エラー時など) でのみ削除したい場合os.remove(os.path.join(temp_dir, now+".zip"))は、ファイルが削除されるたびに使用する必要があります。

try:
    do_stuff
except VerySpecialException:
    os.remove(os.path.join(temp_dir, now+".zip")) # do that here for a special exception?
    raise # re-raise
except: # only use a bare except if you intend to re-raise
    os.remove(os.path.join(temp_dir, now+".zip")) # or here for all exceptions?
    raise # re-raise
else:
    os.remove(os.path.join(temp_dir, now+".zip")) # or here for success?
于 2012-11-20T00:02:44.043 に答える
3

これはそれを行う方法です:

os.remove(os.path.join(temp_dir, now+".zip"))

楽しんでね、マイク

于 2012-11-19T23:04:58.067 に答える
2

Pythonの組み込みの一時ファイルライブラリの使用を検討してください。閉じられたときに一時ファイルのクリーンアップを処理します。

于 2012-11-20T15:30:46.397 に答える