【问题标题】:Traversing ZIP Files遍历 ZIP 文件
【发布时间】:2014-01-08 23:20:47
【问题描述】:

我正在尝试编写一个小助手应用程序来在我们的备份服务器上查找 PDF。我在当地的一家零售连锁店工作,处理我们文书工作的员工有时需要我们商店的报告副本。通常情况下,我觉得它值得一个程序化的答案,所以我今天早些时候开始研究它,但很快就碰壁了。

我对@9​​87654322@ 了解不多,但我所学到的不足以做我需要做的事情。在我的备份服务器中,我有一组名为 comsMMDDYY.zip 的存档(我们每天接收一个文件)(MMDDYY 作为我们处理文件的日期,通常每周一到周五)。在每个存档中,我有一组在该日期从每个商店收到的文件,命名为 SSSSMMDD.ZIPSS 是商店编号,MMDD 是这些报告所代表的文书工作日期)。

很有可能在coms010814.zip 内部我将拥有00010106.ZIP -- 日期不相关,因为每个商店都在处理前一天的文书工作,我们直到下一天才会收到他们发送的数据天。

我可以管理遍历那些 zip 档案。我构建了一个 listcomp,它为我正在寻找的那天和之后的 10 天构建了一个 datetime.date 对象,然后检查每个 comsMMDDYY.zip 存档以查看它是否包含我请求的 com 文件,然后我提取它。

问题是当我提取我要查找的com 文件时,它会提取到\\PATH\TO\ARCHIVE\PATH\TO\ARCHIVE\file.zip。它似乎将其目录结构保留在 zip 文件中,并在我解压缩时重新创建它。

我觉得我在这里误入了 XY 问题,但在我通过这部分之前无法进入下一步。

My code can be found here,为清楚起见(我希望)进行了评论。我的最终目标是做这样的事情:

OUT: Paperwork date (mm/dd/yyyy):
IN: 12/26/2013

OUT: Store Number:
IN: 1

OUT: Which report would you like to print
OUT: 1. report name
OUT: 2. report name
OUT: ...
OUT: n. report name
IN: 2

OUT > Printer the relevant PDF

【问题讨论】:

    标签: python python-3.x zipfile


    【解决方案1】:

    我又花了一个小时左右的时间研究这个问题,但一无所获。回到我的问题,我检查了“相关”菜单并看到 this question 这似乎完美地解决了我想做的事情。

    对于其他遇到此问题的人,而不是写:

    file = [file for file in zipfilelist.namelist() if file.split('/')[-1] == target]
    if file:
        return file
    

    和所有其他 gobbledeegook,我改为:

    file = [file for file in zipfilelist.namelist() if file.split('/')[-1] == target]
    if file:
        tmp = archive.read(file[0])
        with NamedTemporaryFile(delete=False) as f:
            f.write(tmp)
            return f.name
    

    请注意,我必须使用上下文管理器进行迭代才能执行此操作,因为我要提前退出循环(因此无法关闭其余文件),但我的目标是在某些时候重构它反正点。现在我在NamedTemporaryFile 中有我需要的文件,将名称传递回我的main() 循环,并且可以在那里对其进行操作。完成后,我可以os.remove(file),一切都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2016-12-18
      • 2012-11-23
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多