如何在Python中从TXT文件匹配'MB/s'?代码返回None求助
排查re.match匹配'MB/s'返回None的问题
我来帮你分析下可能的原因和解决办法:
1. 文件路径的转义陷阱
你写的文件路径是'C:\Python27\BCF013K.txt',在Python字符串里,\是转义字符,\P属于无效的转义序列,这可能导致Python无法正确识别文件路径,进而读取不到文件内容(data为空字符串),自然re.match返回None。
解决办法:把路径改成原始字符串(加r前缀),或者把\换成\\:
# 方法1:原始字符串 raw = open(r'C:\Python27\BCF013K.txt', encoding='UTF-8') # 方法2:转义反斜杠 raw = open('C:\\Python27\\BCF013K.txt', encoding='UTF-8')
2. UTF-8 BOM头的干扰
如果你的文件是带UTF-8 BOM头保存的,那么read()得到的字符串开头会有一个不可见的BOM字符(\ufeff),这会导致MB/s不是字符串的真正起始位置,re.match就匹配不到。
可以先检查data的开头:
print(repr(data[:10])) # 打印前10个字符的原始表示,看有没有\ufeff
如果确实有BOM,可以用utf-8-sig编码打开文件来自动去除BOM:
raw = open(r'C:\Python27\BCF013K.txt', encoding='utf-8-sig')
3. 换用re.search替代re.match
re.match只从字符串的第一个字符开始匹配,而re.search会扫描整个字符串寻找匹配项。即使开头有问题,用re.search可以先确认文件里是否真的存在'MB/s':
print(re.search(r'MB/s', data))
如果这个能返回匹配结果,就说明是开头位置的问题(比如BOM或路径导致的读取异常)。
验证步骤
建议你按这个顺序排查:
- 先修正文件路径,确保能正确读取文件内容(可以打印
data看看是否和文件内容一致) - 如果读取正常但match还是返回None,检查是否有BOM头
- 最后用re.search确认匹配是否存在
内容的提问来源于stack exchange,提问作者user2643912
相关产品推荐
相关产品推荐

