2011-06-28 2 views
1

私はファイルを圧縮するために私がautomatorで使うpythonスクリプトを書いています。問題は、私がディレクトリ全体(すべてのフォルダを意味する)+ファイルを圧縮するときに、ファイルが単なるファイルではなく圧縮されていることです。だから私はargs、test1とtest2の出力として "Currentdate & time.zip"と私はそれを抽出するときに2つのファイルと私のデスクトップ上でこれを実行した場合。これは/ users/dean/desktop/test1のようになります。 /Users/dean/desktop/test2Pythonは単独のファイルではなくディレクトリ全体を圧縮します

このようにすると、すべてのフォルダが圧縮されます。助けてください

このコードは、ターミナルから実行されたが、オートメーターでは実行されませんでした(以下の私のコメント)。このコードをオートメーションのサービスとして使用します。 1つのファイルが正常に動作します。複数のファイルは、あなたのループのため、これに代えて1

OSX_username = getpass.getuser() 
now = datetime.datetime.today() 
dir = os.getcwd() 
zip_dir = dir + "/" + now.strftime("%Y-%m-%d %H:%M") + '.zip' 
dst_dir = "/Users/" + OSX_username + "/Desktop" 
zf = zipfile.ZipFile(now.strftime("%Y-%m-%d %H:%M") + '.zip', mode='w') 

if len(sys.argv) > 3: #app 2 service 3 
    for f in sys.argv[1:]: 
     try: 
      zf.write(f) 
     finally: 
      print '' 
    zf.close() 
    src = zip_dir 
    last_part = os.path.basename(src) 
    shutil.move(src, dst_dir) 
+0

使用例を追加できますか?あなたのコードを調べるだけで、それは引数を解析する際の問題だと思いますが、私は完全に間違っている可能性があります。 – mac

答えて

2

> 3は本当に(sys.argvのを)lenをしなければならない>ところで(sys.argvの)lenはいけない -

zf.write(f) 

これを試してみてください -

zf.write(f, os.path.basename(f), zipfile.ZIP_DEFLATED) 
+0

はい、私は端末からスクリプトを実行すると動作します。いいえ、それは私がautomatorでスクリプトを実行すると動作しません。理由は私がターミナルから私のargsがtest.txtとtest1.txtであるスクリプトを実行するときです。私がautomatorで実行すると、argsは/Users/dean/desktop/test1.txtとなります。/Users/dean/desktop/test2.txt – jellyDean

+0

@Dean - 試してみてください。 'zf.write(f、os.path.basename (f)、zipfile.ZIP_DEFLATED) ' –

+0

それはそれをしました。ありがとうございます!!!もし私が15のスコアを持っていたら、あなたの投票は封印されるでしょう。もう一度ありがとう – jellyDean

関連する問題