0

開始する前に、target_dir のスナップショットを取得し、zip して一時フォルダーに保存し、「now」変数のファイル名を付ける Python zip スクリプトを作成しようとしています。これは私が持っているコードです:

#!/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('/tmp/example.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:])

宛先をハードコーディングする代わりに、変数「now」と「temp_dir」を使用するようにこの行を取得する方法がわかりません。

zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED)

私はこのようなものが欲しいと思います(疑似コード):

zip = zipfile.ZipFile('<temp_dir>/<now>.zip', 'w', zipfile.ZIP_DEFLATED)

誰でもこれを行う方法を教えてもらえますか?

4

3 に答える 3

2

要するに、os.path.join(temp_dir, now + '.zip')しかし、それが本当にあなたが求めているものかどうかはわかりません. どうやってここまでたどり着けたのに、ここで立ち往生したのかわからないからです。

于 2012-11-19T22:28:06.673 に答える
1

Python文字列フォーマットを使用すると、変数のコンテンツを文字列に入れることができます。

zip = zipfile.ZipFile('%s/%s.zip' % (temp_dir, now), 'w', zipfile.ZIP_DEFLATED)

文字列フォーマットは、 "%s"の出現箇所を、フォーマット演算子の後のタプル内の文字列に置き換えます%

または、(そしてよりクリーンに)、os.path.joinコードの後半で使用するものと同じものを使用します。

zip = zipfile.ZipFile(os.path.join(temp_dir, now+".zip"), 'w', zipfile.ZIP_DEFLATED)

os.path.joinは、ファイルシステムが使用するロジックに従って、ファイルシステムパスの要素を結合する関数であるため、パスでその文字を使用するオペレーティングシステムでは\なく使用されます。/文字列の連結はただ+のことなので、ファイルの末尾.zipを別の文字列nowに接着するnow+".zip"には、トリックを実行します。

于 2012-11-19T22:29:52.000 に答える
0

You can also use the higher-level function within shutil:

>>> import shutil
>>> from time import strftime
>>> now = strftime("%Y-%m-%d_%H-%M")
>>> shutil.make_archive('/tmp/file_%s' % now, 'zip', '/usr/games/')
'/tmp/file_2012-11-19_22-43.zip'
于 2012-11-19T22:45:55.410 に答える