【问题标题】:python and windows file systems : check filename exists inside a zip archivepython 和 windows 文件系统:检查 zip 存档中是否存在文件名
【发布时间】:2018-10-24 07:46:27
【问题描述】:

在 windows 下使用 python 2.x,本地驱动器上的文件(不是 UNC)。

似乎 ziplib 将文件名存储在 zip 存档中,剥离驱动器号并转换路径分隔符:

C:\msala\test.txt --> msala/test.txt

问题:

  1. 这种行为是否符合 zip 文件格式的规范,还是只是 ziplib 的一个警告?

  2. 如何检查给定文件名是否在存档中?

我更愿意避免这种丑陋的 hack:

if sys.platform == "win32" :
    if filename[1:3] == ":\\" :
        filename = filename[3:]
    filename = filename.replace(os.sep, '/')

if filename in zfh.namelist() :

恕我直言,必须管理这个非常不符合pythonic(包括电池?!)......

【问题讨论】:

    标签: python windows zip zipfile


    【解决方案1】:

    问题 1:从 4.4.17 (https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT)

    所有斜线 必须是正斜杠 '/' 而不是 反斜杠 '\' 以与 Amiga 兼容 和 UNIX 文件系统等。

    问题 2:有很多方法可以做到这一点,例如

    zip_filename = os.path.splitdrive(filename)[1].replace('\\', '/')
    

    (应该同样适用于 windows 上的 windows 路径和 linux 上的 linux 路径)。

    【讨论】:

    • mmh 你有没有发现关于剥离驱动器号的任何信息?
    • 查看更新的答案。注意:它不适用于 linux 上的 windows 路径,即。 os.path.splitdrive(r'c:\users\bjorn') 在 linux(和 wsl)上返回 ('', 'c:\\users\\bjorn')
    • 你可能也应该注意 Eren 的回答:stackoverflow.com/questions/13846000/…
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2012-08-23
    • 1970-01-01
    • 2011-09-23
    • 2012-11-24
    • 2013-01-08
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多