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

Windows下如何用Python读取含特殊字符的文件?解决Errno 22报错

解决Windows下Python读取含特殊字符文件名的IOError问题

我懂你现在的困扰——在Windows上用Python读取带?/\'""这类特殊字符的文件时,碰到了[Errno 22] invalid mode ('rb') or filename的错误,尤其是像AppsFlyerLib$?.smali这种带?的文件名,确实容易踩坑。下面给你几个实用的解决方案:

1. 用原始字符串定义文件路径

Python里的反斜杠\是转义字符,直接写路径会导致解析错误,而且?这类特殊字符也会被误判。在字符串前加r(原始字符串标记),就能让Python完全按字面意思解析路径,不会处理转义序列:

file_path = r'C:\Users\Cost2Action\Desktop\Myntra\Myntra_v3.25.0_apkpure.com\smali\com\appsflyer\AppsFlyerLib$?.smali'
with open(file_path, 'rb') as f:
    content = f.read()

2. 明确使用Unicode字符串(Python 2.x适用,Python 3.x可忽略)

如果是Python 2.x版本,默认字符串是ASCII编码,处理特殊字符容易出问题,给路径字符串加u前缀,用Unicode格式定义路径:

file_path = u'C:\\Users\\Cost2Action\\Desktop\\Myntra\\Myntra_v3.25.0_apkpure.com\\smali\\com\\appsflyer\\AppsFlyerLib$?.smali'
with open(file_path, 'rb') as f:
    content = f.read()

Python 3.x的字符串默认就是Unicode,所以直接用原始字符串基本就能解决问题。

3. 调用Windows原生API绕过标准库限制

如果上面的方法都不行,试试用pywin32库直接调用Windows系统API来操作文件,绕开Python标准库对路径的解析限制:

首先安装pywin32:

pip install pywin32

然后用win32file模块打开文件:

import win32file

file_path = r'C:\Users\Cost2Action\Desktop\Myntra\Myntra_v3.25.0_apkpure.com\smali\com\appsflyer\AppsFlyerLib$?.smali'
# 调用Windows API创建文件句柄
handle = win32file.CreateFile(
    file_path,
    win32file.GENERIC_READ,
    win32file.FILE_SHARE_READ,
    None,
    win32file.OPEN_EXISTING,
    win32file.FILE_ATTRIBUTE_NORMAL,
    None
)
# 读取文件内容,ReadFile返回的第二个元素是读取到的数据
data = win32file.ReadFile(handle, 4096)[1]
# 记得关闭句柄
handle.Close()

4. 检查路径中的多余转义

你的错误信息里路径出现了\\\\,这大概率是手动输入时重复转义导致的,比如把单个\写成了\\,用原始字符串就能避免这个问题,建议直接从文件属性里复制绝对路径,再用原始字符串包裹,减少手动输入错误。

内容的提问来源于stack exchange,提问作者Vijay Pratap pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:38:23