如何修复Python批量提取文件夹内txt文件指定开头行的代码错误?
问题原因分析
- 匹配字符串错误:你当前代码里写的匹配前缀是HTML转义后的实体字符串
<meta property="og:description" content=,但实际文件里存储的是原生的<meta property="og:description" content=,二者完全不匹配,自然找不到结果。就算你缩短匹配内容为<meta>,只要还是用转义后的字符格式去匹配,也不可能命中结果。 - 打印逻辑位置错误:
print(pTxt)被放在了遍历文件每行的内层循环里,每读取一行就会打印一次列表,即便后续有匹配结果,前面也会输出大量空列表。 - 缺少文件类型过滤:当前glob匹配路径是
/*,会匹配到文件夹、非文本文件等,读取这类路径会直接报错,也可能干扰匹配结果。 - 未处理行首空白:如果目标行前面存在空格、制表符等缩进字符,直接用
startswith匹配会失败。 - 未正确关闭文件:直接用
open()打开文件后没有显式关闭,可能引发资源泄漏,也可能因为缓存问题导致读取内容异常。
修改后可运行代码
import glob # 限定只匹配txt文件,避免读到其他类型的文件/文件夹 filepath = '/Volumes/hardDrive/Folder/files/*.txt' # 匹配前缀用原生未转义的字符串 target_prefix = '<meta property="og:description" content=' corpus = glob.glob(filepath) for textfile in corpus: # 用with上下文管理器自动处理文件关闭,指定编码避免乱码 with open(textfile, 'r', encoding='utf-8') as f: for ln in f: # 先去掉行首的空白字符再匹配 if ln.lstrip().startswith(target_prefix): # 直接打印符合要求的行,strip()可按需去掉首尾换行符 print(ln.strip())
内容的提问来源于stack exchange,提问作者kjkendro
相关产品推荐
相关产品推荐

