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
相关产品推荐
相关产品推荐

