小甲鱼Python学习笔记

课程主题

  • 讲师:小甲鱼
  • 核心任务:读取record.txt文件,按规则分割对话内容并分文件保存
  • 核心需求:文件数据处理 + 按条件分类保存 + 代码优化重构

任务核心规则

  • 对话人物区分:小甲鱼的对话 → boy_开头文件;小客服的对话 → girl_开头文件
  • 内容处理要求:去除「小甲鱼:」「小客服:」的前缀字符
  • 文件拆分规则:文件内用连续等号分隔3段对话 → 生成 boy1/2/3.txt + girl1/2/3.txt 共6个文件

解题核心思路

  1. 打开目标文件record.txt,按行读取内容
  2. 初始化2个列表:boy = [] 存小甲鱼对话、girl = [] 存小客服对话
  3. 初始化计数器:count = 1 用于标记对话分段(1/2/3)
  4. 逐行判断逻辑:
    • 非分隔行:切割内容,分类存入对应列表
    • 分隔行(连续等号):将列表内容写入对应文件,重置列表+计数器+1
  5. 循环结束后:处理最后一段未被保存的对话内容

核心操作知识点

1. 行内容判断(分隔符识别)

  • 逻辑:判断每行内容前6个字符是否为等号,即可识别对话分隔行
  • 作用:无需写完整等号串,简化判断逻辑

2. 字符串切割(关键去前缀)

  • 使用字符串内置方法:split('分隔符')
  • 用法:role, spoken = each_line.split(':')
    • 英文冒号切割每行内容,左侧是人物角色,右侧是纯对话内容
    • 完美剔除「小甲鱼:」「小客服:」前缀,只保留有效对话

3. 内容分类存储

  • 条件判断:if role == '小甲鱼'boy.append(spoken)
  • 条件判断:if role == '小客服'girl.append(spoken)

4. 文件写入核心方法

  • 使用文件对象内置方法:writelines(序列)
  • 优势:可直接将字符串列表一次性写入文件,适配我们的列表存储格式
  • 打开模式:open(文件名, 'w') 写入模式,自动创建新文件

基础版代码实现(test1)完整逻辑

  1. 初始化变量:boy = []girl = []count = 1
  2. 打开文件:f = open('record.txt')
  3. 循环逐行读取:for each_line in f:
    • 分支① 非分隔行:切割→判断角色→追加到对应列表
    • 分支② 分隔行:拼接文件名 → 打开文件 → writelines写入 → 关闭文件 → 重置列表 → count +=1
  4. 处理最后一段对话:把循环结束后boy/girl列表的内容,按count值写入最后一组文件
  5. 关闭源文件:f.close()
  • 必做操作:文件打开后必须调用close()关闭,释放资源

优化版代码实现(test2)核心优化点

核心痛点:基础版存在大量重复代码

  • 重复代码块:文件保存的「拼接文件名-打开-写入-关闭-重置列表」逻辑出现2次

优化方案:函数封装 → 解耦+简洁+复用,代码更专业优雅

封装1:保存文件的功能 → save_file(boy, girl, count)

  • 传入参数:小甲鱼对话列表、小客服对话列表、当前分段数
  • 内部实现:所有文件保存相关逻辑全部封装在此函数内
    • 拼接文件名:boy_file_name = 'boy_' + str(count) + '.txt'
    • 拼接文件名:girl_file_name = 'girl_' + str(count) + '.txt'
    • 打开文件+写入+关闭的全套操作

封装2:文件分割的核心逻辑 → split_file(file_name)

  • 传入参数:目标文件名(如'record.txt')
  • 内部实现:初始化变量、逐行读取、判断切割、分类存储、调用save_file(),所有分割逻辑封装在此

最终简化调用

  • 主程序只需一行代码:split_file('record.txt')
  • 代码结构清晰:仅2个自定义函数,各司其职,可读性拉满

易错点 & 注意事项

  1. 容易遗漏「最后一段对话」的保存,因为文件末尾无分隔行,循环内不会触发保存逻辑
  2. 文件打开后必须关闭,养成良好编码习惯
  3. split切割的分隔符要和文件内一致(英文冒号)
  4. 计数器count要在保存文件后自增,保证分段命名正确
  5. 写入模式'w'会覆盖同名文件,适合本次新建文件的需求