Edexcel GCSE计算机课程:文件分类程序关键词匹配异常求助
问题排查与修正
核心错误分析
- 分割逻辑错误:你用
line.split(".")把每行内容拆成了列表,但关键词(如INFORMATION)是存在于列表的某个字符串元素里,而不是列表的直接成员。你的check函数是判断关键词是否在这个列表中,自然永远找不到。 - 违反作业要求:题目明确说无需使用内部数据结构(比如你定义的
newFile、info_log这些列表),你的写法既冗余又容易出错。 - 缺少文件备份步骤:作业要求编写代码前备份现有文件(已存在的
Info.log),你的代码完全没处理这一步。
符合要求的修正代码
import shutil # 先备份已存在的信息日志 INFO_LOG = "Info.log" shutil.copy(INFO_LOG, f"{INFO_LOG}.bak") # 定义所有文件名 INPUT_FILE = "Lorem_Ipsum (2).txt" ERROR_LOG = "Error.log" # 逐行处理输入文件,直接写入对应日志 with open(INPUT_FILE, "r") as input_file: # 以追加模式打开信息日志(保留原有表头),错误日志不存在会自动创建 with open(INFO_LOG, "a") as info_log, open(ERROR_LOG, "a") as error_log: for line in input_file: cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行 # 检查关键词并写入日志 if "ERROR" in cleaned_line: error_log.write(line) if "INFORMATION" in cleaned_line: info_log.write(line)
代码说明
- 文件备份:用
shutil.copy给Info.log创建备份文件Info.log.bak,满足作业的备份要求。 - 无内部数据结构:直接逐行读取输入内容,处理后立即写入日志,没有用列表存储所有数据,符合题目要求。
- 正确的关键词判断:直接检查关键词是否在当前行的字符串中,解决了你原代码的判断逻辑错误。
- 安全的文件处理:使用
with语句自动管理文件的打开和关闭,避免手动关闭文件可能带来的资源泄漏问题。 - 追加模式写入:
Info.log用a模式打开,不会覆盖原有表头;Error.log不存在时会自动创建。
内容的提问来源于stack exchange,提问作者Bilqees Mahamed
相关产品推荐
相关产品推荐

