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

Python处理文件名中的非英文字符与空格问题(Windows环境)

解决Windows下Python保存含特殊字符文件名的问题

问题根源

  1. 无效文件名字符:Windows系统禁止文件名包含 < > : " / \ | ? * 这类字符,你目标文件名里的 ? 是触发 OSError: [Errno 22] 的直接原因。
  2. 错误的写入模式:你下载的是MP4二进制文件,却使用文本模式 "w" 写入,即便文件名问题解决,也会导致文件损坏无法正常播放。

修正后的代码

from urllib.request import urlopen
from urllib import request
from urllib.parse import unquote
import os

def sanitize_filename(filename):
    # 定义Windows不允许的文件名字符集合
    invalid_chars = '<>:"/\\|?*'
    # 将每个无效字符替换为下划线,保留文件名核心信息
    for char in invalid_chars:
        filename = filename.replace(char, '_')
    return filename

base_dir = os.getcwd()
print(base_dir)
url = 'https://drive.google.com/u/0/uc?id=1KD3dIMaJU6SY8NX38jOW3DWQYjPGN-9A&export=download'
resource = request.urlopen(request.Request(url))

content = resource.getheader('Content-Disposition')

filename = content.split('*=')[1]
filename = unquote(filename.split("''")[1])
# 清理文件名中的无效字符
filename = sanitize_filename(filename)
filepath = os.path.join(base_dir, filename)

with urlopen(url) as file:
    file_content = file.read()
    
# 使用二进制模式写入文件,适配MP4等非文本格式
with open(filepath, "wb") as f:
    f.write(file_content)

关键修改说明

  • 文件名清理:通过 sanitize_filename 函数替换Windows禁止的字符,既规避系统报错,又最大程度保留原文件名的可读性。
  • 二进制写入:将打开模式从 "w" 改为 "wb",确保二进制文件的字节流被正确写入,避免文件损坏。

内容的提问来源于stack exchange,提问作者Mubin Icyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:55:30