如何移除含西里尔文TXT文件行尾的短连字符?
解决行尾短连字符移除问题
你的代码未生效的核心原因是:读取的每行末尾通常带有换行符(\n或Windows下的\r\n),导致行的实际结尾是-\n,而removesuffix('-')只会匹配**字符串最后一个字符就是-**的情况,自然匹配不到目标连字符。
另外也需要确认:你文件中的“短连字符”是否是标准ASCII连字符(U+002D)——如果是西里尔文场景下的特殊连字符(比如非断字连字符U+2010),也需要调整匹配字符。
以下是几种可靠的解决方案:
方法1:手动处理换行符后移除连字符
先剥离行尾的换行符,处理连字符后再补回换行,逻辑清晰直观:
with open('dim.txt','r',encoding='utf-8') as f1, open('n_dim.txt','w',encoding='utf-8') as f2: for line in f1: # 仅移除换行相关字符,保留其他行尾空白 stripped_line = line.rstrip('\n\r') # 判断并移除行尾连字符 if stripped_line.endswith('-'): stripped_line = stripped_line[:-1] # 写回时补回换行符 f2.write(stripped_line + '\n')
方法2:用正则表达式匹配行尾连字符
正则可以更灵活地处理行尾可能存在的空白(比如空格、制表符)+ 连字符的情况:
import re with open('dim.txt','r',encoding='utf-8') as f1, open('n_dim.txt','w',encoding='utf-8') as f2: for line in f1: # 替换行尾的连字符,保留后续的空白/换行 modified_line = re.sub(r'-(\s*)$', r'\1', line) f2.write(modified_line)
特殊连字符的处理
如果文件中的连字符不是标准ASCII -,可以用以下代码查看字符编码:
with open('dim.txt','r',encoding='utf-8') as f: # 取任意一行带连字符的行 line = f.readline() # 打印行尾2个字符的Unicode编码 print([ord(c) for c in line.strip()[-2:]])
比如输出[8208]对应U+2010非断字连字符,此时只需将代码中的'-'替换为'\u2010'即可。
内容的提问来源于stack exchange,提问作者Pompan
相关产品推荐
相关产品推荐

