2011-06-28 51 views
1

我已經寫了一個python腳本,我使用automator來壓縮文件。問題是,當我壓縮他們整個目錄(意思是所有的文件夾)+文件被壓縮,而不僅僅是文件本身。所以,如果我在桌面上運行這兩個文件作爲參數,測試1和測試2輸出將是「當前日期& time.zip」,當我提取它。它會看起來像這樣/ Users/dean/desktop/test1 /Users/dean/desktop/test2Python壓縮整個目錄而不是唯一的文件

因此,當所有我想要的文件都是壓縮所有這些文件夾。請幫助

此代碼從終端運行時運行greate,但不在automator(我的評論如下)我使用此代碼作爲automator中的服務。所以一個文件工作正常。多個文件不BTW LEN(sys.argv中)> 3確實應該LEN(sys.argv中)> 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

在你的for循環中,取而代之的是 -

zf.write(f) 

試試這個 -

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

是的,它工作時,我從終端運行腳本。不,它在我在automator中運行腳本時不起作用。原因是當我從終端運行腳本我的參數是test.txt和test1.txt。當我在automator中運行它時,我的參數變爲/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

相關問題