【问题标题】:Python compresses entire directory rather than the sole filesPython 压缩整个目录而不是单个文件
【发布时间】:2011-09-24 14:08:23
【问题描述】:

我编写了一个 python 脚本,我在 automator 中使用它来压缩文件。问题是当我压缩它们时,整个目录(意味着所有文件夹)+文件被压缩,而不仅仅是文件本身。因此,如果我在桌面上使用两个文件作为 args、test1 和 test2 运行它,输出将是“Currentdate&time.zip”,当我提取它时。它看起来像这样 /Users/dean/desktop/test1 /Users/dean/desktop/test2

所以当我想要的只是文件时,它会压缩所有这些文件夹。请帮忙

此代码在从终端运行但不在 automator 中运行时效果更好(我在下面的评论)我将此代码用作 automator 中的服务。所以一个文件可以正常工作。多个文件不要顺便说一句 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)

【问题讨论】:

  • 你能添加一个示例用法吗?从只是检查你的代码我猜这是解析参数的问题,但我可能完全错了......

标签: python directory zip compression automator


【解决方案1】:

在你的 for 循环中,而不是这个 -

zf.write(f)

试试这个 -

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

【讨论】:

  • 是的,当我从终端运行脚本时它可以工作。不,当我在自动机中运行脚本时它不起作用。原因是当我从终端运行脚本时,我的参数是 test.txt 和 test1.txt。当我在 automator 中运行它时,我的 args 变为 /Users/dean/desktop/test1.txt & /Users/dean/desktop/test2.txt
  • @Dean - 试试这个,zf.write(f, os.path.basename(f), zipfile.ZIP_DEFLATED)
  • 是的,做到了。先生非常感谢您!!!如果我得 15 分,你的投票就会被封印。再次感谢
  • @Dean - 没问题!请不要叫我先生,我太年轻了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
相关资源
最近更新 更多