Python读取文本文件指定开头行并提取内容的实现方案
解决方法:提取文本文件中
text = 开头行的引号内容 先点明你代码里的几个问题,再给出修正后的完整方案:
原代码的问题
glob.glob(sys.argv[1])返回的是文件路径列表,直接传给open()会报错,因为open()需要单个字符串路径lines = f.read()把整个文件读成一个字符串,for line in lines会遍历每个字符,而非每一行- 大小写不匹配:你判断的是
'Text = '(首字母大写),但目标行是'text = '(全小写),会漏掉目标行 - 导入了
os、english_words_set但没用到,属于冗余代码
修正后的代码
import sys import glob try: print('Finding file...') # 获取匹配的文件列表,支持批量处理 file_paths = glob.glob(sys.argv[1]) if not file_paths: print("No files found!") sys.exit(1) print(f"Found {len(file_paths)} file(s)!") for file_path in file_paths: print(f'LOADING {file_path} NOW...') with open(file_path, 'r', encoding='utf-8') as f: # 直接遍历文件对象,逐行读取更省内存 for line in f: # 去除行首尾空白(含换行),避免空格干扰判断 stripped_line = line.strip() # 匹配小写开头,若需忽略大小写可改成:stripped_line.lower().startswith('text = ') if stripped_line.startswith('text = '): # 按双引号分割内容 parts = stripped_line.split('"') if len(parts) >= 2: # 去除内容前后空白,和期望输出一致 content = parts[1].strip() print(content) except Exception as e: print(f"Error: {e}")
关键说明
- 文件路径处理:先判断
glob返回的列表是否为空,再遍历处理每个匹配到的文件,支持批量操作 - 逐行读取优化:直接遍历文件对象
f,会自动按行读取,比readlines()更节省内存 - 大小写兼容:如果需要适配
Text =或TEXT =这类写法,把判断条件改成stripped_line.lower().startswith('text = ')即可 - 鲁棒性提升:先判断分割后的列表长度,避免遇到无引号的行时出现索引报错
- 输出格式对齐:用
strip()去掉内容前后的空格,和你给出的期望输出完全匹配
测试示例文件时,运行脚本(假设脚本名为extract_text.py,目标文件为data.txt):
python extract_text.py data.txt
会输出:
Hello I am Robin and I am hungry
内容的提问来源于stack exchange,提问作者Beginnercoder
相关产品推荐
相关产品推荐

