使用 python 管理 .zip 文件的zipfile 模块非常有趣。
但是,如果 .zip 文件是在 linux 系统或 macos 上创建的,则分隔符当然是“/”,如果我们尝试在 Windows 系统上使用此文件,则可能会出现问题,因为分隔符是“\”。因此,例如,如果我们尝试确定 .zip 文件中压缩的目录根目录,我们可以考虑如下:
from zipfile import ZipFile, is_zipfile
import os
if is_zipfile(filename):
with ZipFile(filename, 'r') as zip_ref:
packages_name = [member.split(os.sep)[0] for member in zip_ref.namelist()
if (len(member.split(os.sep)) == 2 and not
member.split(os.sep)[-1])]
但是在这种情况下,我们总是得到 packet_name = [] 因为 os.sep 是“\”,而由于压缩是在 linux 系统上完成的,所以路径是 'foo1/foo2'。
为了管理所有情况(在 linux 系统上压缩并在 Windows 系统上使用或相反),我想使用:
from zipfile import ZipFile, is_zipfile
import os
if is_zipfile(filename):
with ZipFile(filename, 'r') as zip_ref:
if all([True if '/' in el else
False for el in zip_ref.namelist()]):
packages_name = [member.split('/')[0] for member in zip_ref.namelist()
if (len(member.split('/')) == 2 and not
member.split('/')[-1])]
else:
packages_name = [member.split('\\')[0] for member in zip_ref.namelist()
if (len(member.split('\\')) == 2 and not
member.split('\\')[-1])]
你觉得这怎么样?有没有更直接或更pythonic的方式来完成这项工作?