You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:48:15