python - 遍历 ZIP 文件

标签 python python-3.x zip

我正在尝试编写一个小帮助应用程序来在我们的备份服务器上查找 PDF。我在本地的一家零售链式店工作,负责文书工作的员工有时需要我们商店提供的报告副本。我经常觉得它值得一个程序化的答案,所以我今天早些时候开始研究它,但很快就遇到了困难。

我对zipfile.ZipFile了解不多,但我所学到的还不足以完成我需要做的事情。在我的备份服务器中,我有一组名为 comsMMDDYY.zip 的存档(我们每天收到的文件一个)(其中 MMDDYY 作为我们处理文件的日期,通常每周周一至周五)。在每个存档中,我都有在该日期从每个商店收到的一组文件,名为 SSSSMMDD.ZIP (SS 是商店编号,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

最佳答案

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

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

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

以及所有其他的官样文章,我却这样做了:

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),一切都很好。

关于python - 遍历 ZIP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008671/

相关文章:

c++ - python 中的 Doxygen C++ 注释字符串解析器?

python - 当达到特定的验证准确度时如何停止训练?

python - 命名管道不会阻塞

php - ZipArchive php 类 - 它是 PHP 内置的吗?

powershell - 如何使用 Windows Powershell 提取嵌套文件夹中的所有 zip 文件

java - 将多个gradle zip任务合并为一个

python - 从网络位置导入现有 conda 环境

Python readline - 如何链接主目录中内置的 ncurses?

python-3.x - ModuleNotFoundError : No module named 'py4j'

python-3.x - 匹配条件时合并多个相同长度的列表