Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/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和windows文件系统:检查zip存档中是否存在文件名_Python_Windows_Zip_Zipfile - Fatal编程技术网

python和windows文件系统:检查zip存档中是否存在文件名

python和windows文件系统:检查zip存档中是否存在文件名,python,windows,zip,zipfile,Python,Windows,Zip,Zipfile,在windows下使用Python2.x,本地驱动器上的文件(非UNC) ziplib似乎将文件名存储在zip归档文件中,剥离驱动器号并转换路径分隔符: C:\msala\test.txt-->msala/test.txt 问题: 这种行为是符合zip文件格式的规范,还是仅仅是ziplib的警告 如何检查给定文件名是否在存档中 我宁愿避免这种丑陋的黑客行为: if sys.platform == "win32" : if filename[1:3] == ":\\" :

在windows下使用Python2.x,本地驱动器上的文件(非UNC)

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

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

问题:

  • 这种行为是符合zip文件格式的规范,还是仅仅是ziplib的警告

  • 如何检查给定文件名是否在存档中

  • 我宁愿避免这种丑陋的黑客行为:

    if sys.platform == "win32" :
        if filename[1:3] == ":\\" :
            filename = filename[3:]
        filename = filename.replace(os.sep, '/')
    
    if filename in zfh.namelist() :
    
    我想这是不是很不符合Python的(包括电池?!)来管理这个…

    问题1:从4.4.17()

    所有的斜杠 必须是正斜杠“/”而不是 向后斜杠“\”与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的回答: