如何在文本文件中匹配指定关键词并提取内容至三个列表
提取文本指定字段内容到列表的代码修正
需求说明
- 读取格式固定的文本文件,提取
Name :、Nationality:、Age :(Name、Age与冒号间含若干空格)后的内容 - 将提取的内容分别存入列表
l_name、l_nationality、l_age - 函数仅接收文件名作为参数,返回这三个列表
原代码的问题
- 缩进错误:
with代码块和return语句未缩进在函数内部,违反Python代码块规则,会直接触发语法错误。 - 变量未定义:使用了未声明的
text变量,且一次性读取整个文件为字符串,无法逐行判断内容。 - 列表操作错误:错误地对字符串调用
append()方法,同时用赋值操作替代了列表的追加逻辑。 - 逻辑错误:一次性读取全部文件内容,无法针对每行进行字段匹配。
修正后的代码
def read_information(file_name): l_name = [] l_nationality = [] l_age = [] with open(file_name) as file: # 逐行遍历文件内容 for line in file: line_clean = line.strip() if not line_clean: continue # 跳过空行 # 匹配对应字段并提取内容 if line_clean.startswith("Name :"): content = line_clean.split(":", 1)[1].strip() l_name.append(content) elif line_clean.startswith("Nationality:"): content = line_clean.split(":", 1)[1].strip() l_nationality.append(content) elif line_clean.startswith("Age :"): content = line_clean.split(":", 1)[1].strip() l_age.append(content) return l_name, l_nationality, l_age
修正说明
- 修复缩进问题,确保所有逻辑代码都在函数内部。
- 改为逐行读取文件,针对每行进行内容匹配,符合文本文件的常规处理逻辑。
- 使用
strip()去除行首尾空白字符,避免空行或多余空格干扰匹配。 - 通过
split(":", 1)将行内容按冒号分割为两部分,提取冒号后的内容并清理多余空格,再调用列表append()方法添加到对应列表中。
内容的提问来源于stack exchange,提问作者Learning one step at a time
相关产品推荐
相关产品推荐

