Python如何移除txt文件每行开头的数字编号及点号
问题根因
- 触发
AttributeError: 'list' object has no attribute 'replace'的原因非常直接:readlines()返回的lines是存储每行文本的列表容器,而replace()是字符串类型的专属方法,直接对整个列表对象调用该方法必然触发报错。之前尝试的“替换列表前若干位字符”思路本质也是错的——列表是存储元素的容器,本身不支持字符串级别的替换操作。 - 不要用硬编码固定长度切片的方式删前缀:行号长度不固定(1.占2位、10.占3位、108.占4位),固定切片要么残留多位行号的数字,要么误删有效代码的开头字符。
可直接运行的实现代码
用正则匹配行首的「任意长度数字+英文点+点后可选空格」的前缀模式,自动适配1-108的所有行号,不需要手动判断行号长度:
import re # 替换成你自己的文件路径 input_path = "带行号的生日悖论源码.txt" output_path = "可直接运行的生日悖论源码.py" prefix_rule = re.compile(r"^\d+\.\s*") cleaned_content = [] with open(input_path, "r", encoding="utf-8") as f: for single_line in f: # 仅对单个字符串行执行替换,移除匹配到的行首编号 cleaned_line = prefix_rule.sub("", single_line) cleaned_content.append(cleaned_line) with open(output_path, "w", encoding="utf-8") as f: f.writelines(cleaned_content)
避坑说明
以下是之前逻辑里的典型错误写法,注意规避:
- 直接对
lines列表调用replace方法:列表没有字符串操作方法,必须取到列表里存储的单个字符串元素(也就是每一行的文本)才能调用replace - 循环时未正确索引元素:比如写了
for i in range(len(lines))循环,但循环体内还是对lines整体做操作,没有取lines[i]对应的单行字符串 - 硬编码固定长度切片:比如统一删除每行前2个字符,会导致两位数、三位数行号清理不干净,或者误删代码开头的有效字符
代码运行后生成的输出文件就是移除完所有行号的干净Python源码,可直接运行,不需要手动逐行编辑。
内容的提问来源于stack exchange,提问作者quantum goat
相关产品推荐
相关产品推荐

