Windows下Python提取含冒号文件名的压缩文件问题及解决需求
在Windows上用Python处理含冒号的压缩包文件名
Windows系统不允许文件名中包含冒号(":"),这就是直接用extractall()提取来自Linux的压缩包时,只会生成冒号前名称空文件的原因。要解决这个问题,需要手动遍历压缩包内的每个文件条目,将文件名中的冒号替换为下划线("_")后再提取。
处理ZIP文件
import zipfile import os uri = "/path/to/file.zip" extract_dir = uri[:-4] # 创建提取目录(不存在则创建) os.makedirs(extract_dir, exist_ok=True) with zipfile.ZipFile(uri, 'r') as zf: for entry in zf.infolist(): # 替换文件名中的冒号为下划线 new_name = entry.filename.replace(":", "_") target_path = os.path.join(extract_dir, new_name) if entry.is_dir(): os.makedirs(target_path, exist_ok=True) else: # 确保文件父目录存在 os.makedirs(os.path.dirname(target_path), exist_ok=True) # 读取并写入文件内容 with zf.open(entry) as source, open(target_path, 'wb') as dest: dest.write(source.read())
处理TAR文件
import tarfile import os uri = "/path/to/file.tar" extract_dir = uri[:-4] os.makedirs(extract_dir, exist_ok=True) with tarfile.open(uri, 'r') as tf: for entry in tf.getmembers(): # 修改条目文件名中的冒号为下划线 entry.name = entry.name.replace(":", "_") # 提取修改后的条目 tf.extract(entry, path=extract_dir)
关键说明
- ZIP文件需要手动处理目录创建和文件内容写入,绕过
extractall()的自动处理逻辑; - TAR文件可直接修改条目的
name属性,再调用extract()即可完成重命名提取。
内容的提问来源于stack exchange,提问作者furynerd
相关产品推荐
相关产品推荐

