<>太长了,读不下去了,你不需要建立一点额外的信息,但这是可以做的,没有排序,即使你的EME>确实有ESE>必须排序,性能成本也无关紧要。在

首先,让我解释一下zipfiles是如何工作的。(即使您了解这一点,以后有相同问题的读者也可能不理解。)

zipfile是0个或更多的片段,后跟一个中心目录。在

片段的处理就像它们都被连接到一个大文件中一样。在

文件的主体可以包含任意顺序的zip条目以及您想要的任何内容。(这是DOS/Windows的自解压归档文件的工作方式解压可执行文件位于第一个片段的开头。)任何看起来像zip条目但没有被中心目录引用的内容都不会被视为zip条目(修复损坏的zipfile时除外)

每个zip条目都以一个头开头,该头提供以下数据的文件名、压缩格式等。在

目录是包含大部分相同信息的目录项列表,外加一个指向在何处找到zip条目的指针。在

目录条目的顺序决定了归档文件的顺序。在if I call the builtin method extract("/home/msala/test.txt"), which copy of the file is extracted and written to the file system ?

这种行为在任何地方都没有被指定。在

提取整个归档文件应该按照zip目录中的顺序(与^{}给出的顺序)提取两个文件,第二个文件覆盖第一个文件。在

但按名称提取并不一定要同时给你两个,它可以给你最后一个,或第一个,或随机选择一个。在

Python给出了最后一个。它的工作方式是,当读取目录时,它构建一个dict映射文件名到ZipInfos,只是根据遇到的情况添加它们,所以最后一个文件名将覆盖前面的文件名。(Here's the 3.7 code.)每当您试图通过文件名访问某个内容时,它只会在该dict中查找文件名以获得ZipInfo。在

但这是你想要依靠的吗?我不确定。一方面,这种行为从python1.6到3.7都是一样的,这通常是一个很好的信号,表明它不会改变,即使它从未被记录在案。另一方面,还有一些开放的问题,包括#6818,它旨在通过某种方式向库添加删除支持,从而改变它。在

你自己做同样的事情其实并不难。另外一个好处是,你可以使用不同的规则,总是保持第一个,总是保持最新的修改时间,等等

您似乎担心排序infolist的性能成本,这可能不值得担心。读取和解析zip目录所需的时间将使您的成本几乎不可见。在

但你不需要在这里进行排序。毕竟,您不希望能够以某种顺序获取具有给定名称的所有条目,您只需要为每个名称获取一个特定条目。所以,您可以只做ZipFile在内部所做的事情,这只需要线性时间来构建,每次搜索它都需要恒定的时间。在这里你可以用任何规则。在entries = {}

for entry in zfh.infolist():

if entry.filename not in entries:

entries[entry.filename] = entries

这将保留任何名称的第一个条目。如果要保留最后一个,只需删除if。如果您想在modtime之前保留最新的,只需更改它if entry.date_time > entries[entry.filename].date_time:。等等。在

现在,不再依赖于调用extract("home/msala/test.txt")时发生的情况,您可以调用extract(entries["home/msala/test.txt"]),并知道您得到的是该名称的第一个/最后一个/最后一个/任何文件。在inside the zip archive, is there any flag telling that old copies .. are old copies, superseded by the last one ?

不,不是。在

删除文件的方法是将其从中心目录中删除。只需重写中心目录即可. 由于它位于zipfile的末尾,并且几乎总是小到足以容纳最小的软盘,所以即使在DOS时代,它也被普遍认为是合适的。在

(但是请注意,如果你拔掉电脑中间的插头,你就得到了一个没有中心目录的zipfile,它必须通过扫描所有的文件条目来重建。因此,许多更新的工具,至少对于较小的文件,会将整个文件重写为tempfile,然后在原来的基础上重命名,以保证安全的原子写入。)

至少有些早期的工具有时会用NUL重写条目的路径名的第一个字节,尤其是对于大型归档文件。但这并没有真正地将条目标记为已删除,它只是将其重命名为"\0ome/msala/test.txt"。事实上,许多现代工具都会将其视为准确的含义,并给您一些奇怪的错误,告诉您它们找不到名为'ome'或{}的目录或其他有趣的东西。另外,这意味着目录条目中的文件名不再与文件条目头中的文件名匹配,这将导致许多现代工具将zipfile标记为损坏。在

无论如何,Python的zipfile模块不能完成这两项工作,因此您需要将ZipFile子类来自己添加支持。在

python 更新zip,python、zipfile、文件更新:ZIP-archi中存储的多个版本相关推荐

  1. Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30 ============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔 ...

  2. Python获取当前目录下所有文件的绝对路径并存储在文件中

    Python获取当前目录或者其他指定目录下所有文件的绝对路径并存储在文件中,程序如下: import osfid = open('GetAbsolutePath.txt', 'w')rootdir = ...

  3. mac中python怎么打开中文txt文件-mac在matplotlib中显示中文的操作方法

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 . 通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方 ...

  4. 将keras训练好的神经网络模型生成独立于python环境运行的.exe文件并在matlab中调用(上篇)

    keras是深度学习简单易上手的python第三方库.在实际应用中,常常需要将keras训练好的深度学习模型生成独立于python环境的文件,供不会python的人或未安装python环境的设备调用. ...

  5. 内网python 仓库_GitHub - xanarry/LanTrans-desktop: 这是一个用python写的局域网传文件工具, 跨平台, 仓库中还有安卓版的工程...

    文档(代码比较乱) ubuntu效果 windows效果 主程序, Lantans_desktop.py 运行时所需环境: python3.4, PyQT5 如果接收过程无法被扫描到, 请关闭防火墙 ...

  6. python查找文件中某些字符串_python - Python无法从2个文件的字符串搜索中提取数据吗? - 堆栈内存溢出...

    我使用此代码在2个文件中搜索和比较字符串 fsig = open('file1.txt', 'r', encoding="utf8") fresult = open('file2. ...

  7. Python使用标准库zipfile+re提取docx文档中超链接文本和链接地址

    推荐教材: <Python程序设计实用教程>,ISBN:978-7-5635-6065-3,董付国,北京邮电大学出版社 教材封面: 全国各地新华书店有售 京东购买链接: 配套资源:教学大纲 ...

  8. linux把文件复制到压缩包里,Linux学习笔记(二十)文件压缩 zip压缩、tar打包、打包、解包...

    一.zip压缩 首先安装zip与unzip yum install -y zip/unzip zip 1.txt.zip 1.txt 压缩文件1.txt,压缩文件名称为1.txt.zip zip -r ...

  9. python代码写入方式_【Python 1-17】Python手把手教程之——文件的读写以及I/O操作...

    作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 从文件中读取数据 文本文件可存储的数据量很多,每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其 如 ...

最新文章

  1. 【转发】什么时候该用委托,为什么要用委托,委托有什么好处
  2. arcgisengine计算线要素总长度_弱电监控工程报价清单中,线材及辅材该如何计算?...
  3. Flink并行度与Slot的关系
  4. dst matlab,DSTcode DST跟踪算法MATLAB代码,复杂环境中仿多目标 实现的单 Other systems 其他 272万源代码下载- www.pudn.com...
  5. AD5933不同频率下的转换结果
  6. 诺顿360“偷偷”挖矿被怒喷,杀毒软件手伸向GPU,官方:都是为了用户好
  7. Appium下载安装及环境配置
  8. SoberGGG对针式PKM的初次测评
  9. 2021父亲节祝福话语、海报素材大全
  10. php截取视频指定帧为图片,把视频变成一帧一帧的图片(ae怎么把视频变成单帧) 视频截图视频画面每帧图片截取...
  11. 如何找到外文文献对应的中文文献?
  12. 【原创】自定义分页控件WPF
  13. python语言提供的数字类型有哪些_Python语言中数字类型有哪些?
  14. 10月22日科技联播:饿了么与屈臣氏达成合作;马蜂窝回应数据造假
  15. [sdx62]bitbake lighttpd出现NOTE: Reconnecting to bitbake server...
  16. 论文格式要求及字体大小
  17. 实现微信扫描二维码关注公众号,直接注册登录网站
  18. [MFC] WS_EX_LAYERED 实现透明异形窗口(酷狗歌词、360加速球、窗口边缘阴影)
  19. asp.net 2.0控件开发电子书 下载
  20. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

热门文章

  1. 数值积分21 - Gass 高斯求积公式 Legendre勒让得多项式 高斯-勒让得求积公式
  2. c语言python学习笔记本,【答疑】python编程需要怎样的电脑配置啊? - 视频教程线上学...
  3. php tinyme_豆芽丝
  4. python用Win32com连接excel与CAD实现自动绘图
  5. C++指针详解(精心整理)
  6. android后台持续定位
  7. 1007 Maximum Subsequence Sum
  8. windows版本查询
  9. python数据分析怎么样_Python数据分析必知必会:TGI指数
  10. Oracle rac使用nid和dbms_backup_restore包修改dbid和dbname