Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历ZIP文件_Python_Python 3.x_Zipfile - Fatal编程技术网

Python 遍历ZIP文件

Python 遍历ZIP文件,python,python-3.x,zipfile,Python,Python 3.x,Zipfile,我正试图编写一个小助手应用程序来查找备份服务器上的PDF。我在当地的一家零售连锁店工作,做我们文书工作的员工偶尔需要从我们商店收到的报告副本。我经常觉得它值得一个程序化的答案,所以我今天早些时候就开始了这方面的工作,很快就遇到了困难 我对zipfile.zipfile知之甚少,但我所学的还不足以做我需要做的事情。在我的备份服务器中,我有一组名为comsmmdyy.zip的归档文件(每天接收一个),其中MMDDYY是我们处理文件的日期,通常是每周的周一到周五)。在每个档案中,我都有当天从每个商店收

我正试图编写一个小助手应用程序来查找备份服务器上的PDF。我在当地的一家零售连锁店工作,做我们文书工作的员工偶尔需要从我们商店收到的报告副本。我经常觉得它值得一个程序化的答案,所以我今天早些时候就开始了这方面的工作,很快就遇到了困难

我对zipfile.zipfile知之甚少,但我所学的还不足以做我需要做的事情。在我的备份服务器中,我有一组名为
comsmmdyy.zip
的归档文件(每天接收一个),其中
MMDDYY
是我们处理文件的日期,通常是每周的周一到周五)。在每个档案中,我都有当天从每个商店收到的文件集,名为
SSSSMMDD.ZIP
SS
是商店编号,
MMDD
是这些报告所代表的文书工作日期)

很可能在
coms010814.zip
内,我将拥有
0000106.zip
——日期不相关,因为每个商店都在处理前一天的文书工作,我们要到第二天才能收到他们发送的数据

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

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

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

,为清晰起见(我希望如此)。我的最终目标是这样做:

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

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

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

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
请注意,我必须使用上下文管理器进行迭代才能做到这一点,因为我很早就退出了循环(因此无法关闭其余的文件),但无论如何,我的目标是在某个时候重构它。现在我在a中有了所需的文件,将名称传递回我的
main()
循环,并可以在那里对其进行操作。当我完成后,我可以
os.remove(file)
,一切都很好