如何从文本文件指定位置读取?联系人列表应用删除功能咨询
解决方案:读取指定行与删除联系人功能实现
一、读取文本文件的指定行范围
针对读取第14到18行的需求,这里提供两种Python实现方案:
1. 逐行遍历定位(适合小文件)
直接遍历文件,记录行号,锁定目标范围后读取内容,超出范围就停止遍历提升效率:
start_line = 14 end_line = 18 target_lines = [] with open("contacts.txt", "r", encoding="utf-8") as f: # 用enumerate从1开始计数行号,符合日常行号习惯 for line_num, line in enumerate(f, start=1): if start_line <= line_num <= end_line: target_lines.append(line.strip()) elif line_num > end_line: break print(target_lines)
2. 使用linecache模块(适合频繁读取指定行)
Python内置的linecache模块可以直接获取指定行,无需手动遍历,适合需要多次读取不同行的场景:
import linecache start_line = 14 end_line = 18 target_lines = [] for line_num in range(start_line, end_line + 1): # getline方法直接返回指定行内容,strip()去除换行和空白 line = linecache.getline("contacts.txt", line_num).strip() target_lines.append(line) print(target_lines)
二、删除指定姓名的联系人(姓名+后续4行)
你的联系人格式是姓名占1行,后续4行是电话、地址等信息,所以删除逻辑是找到目标姓名所在行,跳过该行及后续4行,把剩余内容重新写入文件:
def delete_contact(target_name): # 先读取文件所有内容到列表 with open("contacts.txt", "r", encoding="utf-8") as f: lines = f.readlines() new_lines = [] i = 0 while i < len(lines): # 去除行首尾空白后匹配目标姓名 if lines[i].strip() == target_name: # 跳过当前行+后续4行,总共5行 i += 5 else: new_lines.append(lines[i]) i += 1 # 将过滤后的内容写回原文件 with open("contacts.txt", "w", encoding="utf-8") as f: f.writelines(new_lines) # 调用示例:删除名为"张三"的联系人 delete_contact("张三")
关键注意点
- 重名处理:如果有多个同名联系人,上面的代码会删除所有匹配项。要是需要精确删除,可让用户补充电话等额外信息辅助定位。
- 数据安全:操作文件前建议备份原文件,比如复制一份
contacts.txt到contacts_backup.txt,避免误删数据。 - 编码问题:打开文件时指定
encoding="utf-8",防止中文姓名或地址出现乱码。
内容的提问来源于stack exchange,提问作者ImStillLearning
相关产品推荐
相关产品推荐

