You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:32:41