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

Python如何删除文本文件每行中第1至第9个星号之间的内容

实现方案

你可以通过两种方式实现需求,分别是正则匹配法和字符串分割法,两种方式的完整可运行代码如下:

方法1:正则表达式实现

  • 核心逻辑:*在正则中属于特殊量词,需要加反斜杠\转义后才能匹配字面量的星号。我们可以匹配「行首到第9个星号之间的所有内容」,只保留行首的第一列标识和第9个星号之后的内容即可。
  • 匹配规则解释:r'^([^*]*)\*(?:[^*]*\*){8}'
    • ^([^*]*):匹配行首第一个星号之前的所有内容,作为捕获组1
    • \*:匹配第一个星号
    • (?:[^*]*\*){8}:匹配后续8组「非星号内容+星号」的组合,加?:表示非捕获组不占用分组序号
    • 替换为\1*即保留第一列内容和一个星号,后续直接拼接第9个星号之后的内容

方法2:字符串分割法(更易理解,无需处理正则转义)

直接按星号切割每行内容,保留第一个元素和第9个元素之后的所有内容再拼接即可,逻辑更直观不容易出错。


完整修改后代码

import os
import re

path2 = "C:/Users/Lsaxena2/Desktop/RI Stuff/RI RITM1456876 Response files/Processed files with no Logs"
files = os.listdir(path2)
print(files)
# 正则匹配规则(用方法1就保留这行,用方法2可以删掉)
pattern = re.compile(r'^([^*]*)\*(?:[^*]*\*){8}', flags=re.M)

for x in files:
    file_path = os.path.join(path2, x)
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # ===== 二选一使用即可 =====
    # 方法1:正则替换
    new_content = pattern.sub(r'\1*', content)
    
    # 方法2:字符串分割替换(注释掉方法1再打开下面的代码)
    # lines = content.splitlines()
    # new_lines = []
    # for line in lines:
    #     parts = line.split('*')
    #     # 取第一部分 + 第9个索引之后的部分拼接
    #     new_line = parts[0] + '*' + '*'.join(parts[9:])
    #     new_lines.append(new_line)
    # new_content = '\n'.join(new_lines)
    # ========================

    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(new_content)

内容的提问来源于stack exchange,提问作者lakshya saxena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 15:15:03