2011-06-28 38 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

相关问题