Python删除文件指定索引区间行时程序无响应问题排查
问题分析与修正
你的代码存在几个关键问题,直接导致程序无响应且输出不符合预期:
核心错误点
- 冗余嵌套循环:外层遍历每一行的同时,内层又循环499次(
range(1, num)),总行数×499的执行量会让程序在文件行数较多时直接卡死,完全没必要。 - 判断逻辑完全偏离需求:
if number not in [x]是在逐个判断行号是否不等于某个x值,根本没覆盖你要跳过的0到500索引范围——而且range(1, num)只到499,连索引0和500都没包含进去。 - 写入内容错误:
ftpw.write(str(linesr))是把整个行列表转成字符串写入,输出的会是['line1', 'line2', ...]这种列表格式,而非正常的文本行,还会重复写入无数次。
修正后的代码
方式一:适合中小文件(一次性读取)
直接通过切片获取需要保留的行,简洁高效:
num = 500 with open('in.txt', 'r') as ftpr, open('out.txt', 'w') as ftpw: lines = ftpr.readlines() # 索引0到500共501行,从501开始的行即为需要保留的内容 ftpw.writelines(lines[num+1:])
方式二:适合大文件(逐行读取,低内存占用)
避免一次性加载所有内容到内存,性能更优:
num = 500 with open('in.txt', 'r') as ftpr, open('out.txt', 'w') as ftpw: # 先跳过前501行(索引0到500) for _ in range(num+1): next(ftpr) # 写入剩余所有行 for line in ftpr: ftpw.write(line)
内容的提问来源于stack exchange,提问作者Dentricky73
相关产品推荐
相关产品推荐

