[全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)

这篇具有很好参考价值的文章主要介绍了[全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码位置: /Lib/zipfile.py/ZipFile/_extract_member/zipfile.py或者直接点击extract函数.

在使用python解压缩zip文件时, 由于需要在解压时重命名文件为我想要的格式, 而不巧的是, zipfile包官方源代码没有这个功能...

于是, 在百度之后, 果断放弃寻找现成代码的想法.

在研究了一下extract函数的原源代码后, 觉得可以加一个参数targetname用来指代重命名后的文件名, 而很巧的是, 这个新参数并没有在源代码中使用, 所以加入它没有影响.

Talk is easy, show you code~

代码展示

row 1618
    def extract(self, member, path=None, pwd=None,targetname=None):
        """targetname : the name extracted rename to targetname
        
            Extract a member from the archive to the current working directory,
           using its full name. Its file information is extracted as accurately
           as possible. `member' may be a filename or a ZipInfo object. You can
           specify a different directory using `path'.
        """
        if path is None:
            path = os.getcwd()
        else:
            path = os.fspath(path)
 
        return self._extract_member(member, path, pwd,targetname)
 
    def extractall(self, path=None, members=None, pwd=None,targetname=None):
        """Extract all members from the archive to the current working
           directory. `path' specifies a different directory to extract to.
           `members' is optional and must be a subset of the list returned
           by namelist().
        """
        if members is None:
            members = self.namelist()
 
        if path is None:
            path = os.getcwd()
        else:
            path = os.fspath(path)
 
        for zipinfo in members:
            self._extract_member(zipinfo, path, pwd,targetname)
row 1650
...
row 1665
def _extract_member(self, member, targetpath, pwd,targetname):
        """Extract the ZipInfo object 'member' to a physical
           file on the path targetpath.
        """
        if not isinstance(member, ZipInfo):
            member = self.getinfo(member)
 
        # build the destination pathname, replacing
        # forward slashes to platform specific separators.
        arcname = member.filename.replace('/', os.path.sep)
 
        if os.path.altsep:
            arcname = arcname.replace(os.path.altsep, os.path.sep)
        # interpret absolute pathname as relative, remove drive letter or
        # UNC path, redundant separators, "." and ".." components.
        arcname = os.path.splitdrive(arcname)[1]
        invalid_path_parts = ('', os.path.curdir, os.path.pardir)
        arcname = os.path.sep.join(x for x in arcname.split(os.path.sep)
                                   if x not in invalid_path_parts)
        if os.path.sep == '\\':
            # filter illegal characters on Windows
            arcname = self._sanitize_windows_name(arcname, os.path.sep)
        if targetname is None:
            targetpath = os.path.join(targetpath, arcname)
            targetpath = os.path.normpath(targetpath)
        else:
            targetpath = os.path.normpath(targetpath)
 
        # Create all upper directories if necessary.
        upperdirs = os.path.dirname(targetpath)
        if upperdirs and not os.path.exists(upperdirs):
            os.makedirs(upperdirs)
 
        if member.is_dir():
            if not os.path.isdir(targetpath):
                os.mkdir(targetpath)
            return targetpath
        if targetname is None:
            with self.open(member, pwd=pwd) as source, \
                open(targetpath, "wb") as target:
                shutil.copyfileobj(source, target)
        else:
            with self.open(member, pwd=pwd) as source, \
                open(targetpath+"/"+targetname, "wb") as target:
                shutil.copyfileobj(source, target)
 
        return targetpath
row 1713

  用法

可以直接粘贴到自己的源码中, 如果担心出现其他bug, 可以用完就重装zipfile.

调用extract时传入三个参数: 压缩包所在目录, 目标目录, 目标名称(重命名后的名字, 如果为None则默认原命名)文章来源地址https://www.toymoban.com/news/detail-711176.html

到了这里,关于[全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ minizip的简单使用,zip文件的创建、读取、修改、密码压缩、4G以上大文件压缩。

            兄弟姐妹们好,深夜党又来记录枯燥的编程生活了。今天给大家带来的是minizip库,一个解压和压缩文件的开源代码库,如题目所示的结构来介绍。你可以在下面的链接搜索到minizip库: http://www.winimage.com/zLibDll/minizip.html        github地址: zlib/contrib/minizip at master ·

    2024年02月04日
    浏览(26)
  • Flink使用JavaAgent进行字节码修改的文件错误:无法打开ZIP文件或JAR清单丢失

    Flink使用JavaAgent进行字节码修改的文件错误:无法打开ZIP文件或JAR清单丢失 在大数据领域,Apache Flink是一个强大的流处理和批处理框架,它提供了许多功能和工具来处理大规模数据集。在某些情况下,我们可能需要对Flink应用程序的字节码进行修改,以实现一些定制化的需求

    2024年03月16日
    浏览(42)
  • uniapp接入友盟(全网唯一 很全!!!)

    (1)、在小程序文件夹下输入下面代码 npm install umtrack-wx --save (2)、在小程序components文件夹下新建umeng.js (3)、在umeng.js中写入下面代码 (4)、并且需要在友盟管理后台 = 设备管理 = 应用信息 输入AppID和AppSecret 不然的话,无法授权友盟自动获取Openid (5)、接着在微信公

    2024年02月10日
    浏览(32)
  • ZCU106的FMC接口AD/DA(全网唯一、全网最详)

    马上就要毕业啦,好久没写文章了,今天给大家带来硕士期间的最后一次AD/DA实验的实验记录,废话少说,先看连接与视频。 连接 视频 我做的实验是AN108+FL9613的DA与AD回环测试,可能和本节教程有点出入,不过没关系,能成功就行。 实验视频 一、实验任务 采用xilinx的dds波形

    2024年02月02日
    浏览(32)
  • 全网唯一!Matlab世界顶尖艺术品配色包Rmetbrewer

    想要绘制一幅颜色搭配合理、好看又不花哨的论文插图,该如何操作呢? 正所谓 求其上者得其中,求其中者得其下 。 那么, 向高手借鉴思路 ,无疑是一种不落下乘的好策略。 而在色彩搭配领域, 像莫奈、梵高这些世界顶级大师,其对色彩的理解和运用,又可谓是上中上

    2023年04月23日
    浏览(35)
  • 全网唯一最全彻底删除VS及VS注册表!

    当我们不再需要vs或者vs ide出现问题,并且你的专业课老师不教的情况下,怎么样独自且快速的情况下卸载干净。需要重装时,发现总是卸载不干净,卸载重装后该存在的问题还是存在,没有因重装而解决。那么如何彻底的卸载vs不留残留? 设备:HPZHAN66ProA14G3基于x64的电脑

    2024年02月03日
    浏览(26)
  • QT+ModbusTCP 全网唯一好用,基于QTcpSocket纯手搓modbustcp协议

    1.发现问题 最近项目上要把之前的modbus RTU改为TCP形式,因此之前的modbus通讯线程得重构,一开始当然是使用Qt自带的QModbusTcpClient类,很快就重构好线程,读取数据没有问题,但是只要一发送写数据请求,整个tcp连接就会断开,做了很多尝试,排除了从站的问题,即使直接连

    2024年02月03日
    浏览(31)
  • FPGA----VCU128的DDR4无法使用问题(全网唯一)

    1、在Vivado 2019.1版本中使用DDR4的IP核会遇到如下图所示的错误, 即便过了implementation生成了bit,DDR4也无法正常启动。 2、解决办法,上xilinx社区搜一下就知道了 AMD Customer Community https://support.xilinx.com/s/article/69035?language=en_US 这是关于DDR4的所已知问题的解决方案  AMD Customer Comm

    2024年02月07日
    浏览(32)
  • 【前端下载文件流详解】前端实现多种类型文件(word,excel,pdf,rar,zip等)的下载,接口返回文件流形式(附源码)

    【 写在前面 】其实之前我也写了有关java实现文件的下载,但是当时是局限于excel文档,针对其他类型的并没有介绍,这次刚好有个客户现场反馈回来的,说我们系统确实能下载报告,但是甲方领导要看所有的报告,这不我每天得一个一个的点击下载,然后再打包给他们领导

    2023年04月24日
    浏览(42)
  • 【MATLAB】全网唯一的7种信号分解+ARIMA联合的时序预测算法全家桶

    有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有7种信号分解+ARIMA组合的时序预测算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码(见每一算法介绍后文)~ 接下来详

    2024年02月06日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包