Python读取txt单行文本生成指定格式字符串并去除末尾多余or
问题原因分析
- 你当前调用
f.read()是将整个文件的所有内容(包括每行末尾的换行符)读取为一整个字符串,因此三个名词会连带换行一起被塞到同一个括号内 - 直接拼接
or的写法没有判断是否为最后一个元素,必然会在末尾多出不需要的分隔符
最优解决代码
# with上下文管理器自动处理文件关闭,无需手动调用close(),稳定性更高 with open('list.txt', 'r', encoding='utf-8') as f: # 逐行读取,去掉每行末尾的换行/空白字符,同时过滤空行 items = [line.strip() for line in f if line.strip()] # 生成所有目标格式的片段,用' or '拼接,天然不会在首尾多出分隔符 output = ' or '.join(f'(The Dog Plays in the {item})' for item in items) print(output)
逻辑说明
- 逐行读取时的
strip()处理既可以去掉每行末尾的换行符\n,也能过滤掉文件首尾、行首尾的多余空白,if line.strip()的判断可以避免txt末尾有空行导致生成无效内容 - 字符串方法
str.join(可迭代对象)会将可迭代对象里的所有字符串用调用方法的字符串作为分隔符拼接,分隔符只会出现在两个元素中间,完全不需要手动写循环判断是否为最后一个元素,是这类拼接需求的最优实现
手动循环实现(可选)
如果你需要自己通过循环逻辑控制末尾分隔符,可以用索引判断的方式实现:
with open('list.txt', 'r', encoding='utf-8') as f: items = [line.strip() for line in f if line.strip()] output = '' for i, item in enumerate(items): output += f'(The Dog Plays in the {item})' # 只要不是最后一个元素,就拼接分隔符 if i != len(items) - 1: output += ' or ' print(output)
内容的提问来源于stack exchange,提问作者moldygreenbean
相关产品推荐
相关产品推荐

