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
相关产品推荐
相关产品推荐

