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

Python读写文本剔除指定词时保留原空格换行格式问题

问题描述
  • 实现需求:读取文本文件,检索用户输入的指定词汇,将原文件剔除目标词汇后的内容写入新文本文件
  • 现有问题:初始代码可以完成基础的词汇剔除逻辑,但输出文件格式异常,所有内容拼接在同一行,缺少正确空格分隔,无法保留原文档的空格、换行符等原有排版格式
  • 初始实现代码:
def remove(infile, outfile, target):
    for line in infile:
      for word in line.split():
        if word != target:
          outfile.write(word)
        
        
def main():
    outfile = open('outputFile.txt', 'w')
    infile = open('inputFile.txt', 'r')
  
    #Ask user for word they would like to omit from outfile 
    target = input("What word would you like to delete from input file?: ")
    remove(infile, outfile, target)
  
    infile.close()
    outfile.close()
  
main()
问题原因
  • 调用str.split()不传参数时,会将任意长度的空白字符(包括空格、制表符、换行符)全部作为分隔符切分字符串,切分后原始排版的空白信息会直接丢失
  • 写入保留词汇时,既没有在词汇之间补充分隔空格,也没有在每行处理完成后补回换行符,最终所有内容会无间隔拼接成一整行
修改方案

最小改动版本(贴合原有代码逻辑)

仅调整remove函数的处理逻辑,处理完每行的单词后用空格拼接,补回换行符即可解决格式错乱问题:

def remove(infile, outfile, target):
    for line in infile:
        word_list = line.split()
        # 过滤掉目标词汇
        keep_words = [word for word in word_list if word != target]
        # 单词间用空格拼接,末尾补回当前行的换行符
        outfile.write(' '.join(keep_words) + '\n')
        
        
def main():
    # 指定文件编码,避免不同系统下出现乱码
    outfile = open('outputFile.txt', 'w', encoding='utf-8')
    infile = open('inputFile.txt', 'r', encoding='utf-8')
  
    target = input("What word would you like to delete from input file?: ")
    remove(infile, outfile, target)
  
    infile.close()
    outfile.close()
  
main()

注意:该版本会将原文件行内的多连续空格、制表符统一替换为单个空格,但会完整保留原文件的行结构,满足绝大多数日常使用场景。

优化版本(更安全的文件操作+精确整词匹配)

使用文件上下文管理器自动处理文件关闭,避免资源泄漏,同时通过正则匹配独立整词,避免误删包含目标字符串的其他单词(比如目标词为cat时,不会误删category中的cat片段):

import re

def remove(infile, outfile, target):
    # 转义目标词中的特殊正则字符,匹配独立整词+词后附带的空白,尽可能保留原始排版
    pattern = re.compile(rf'\b{re.escape(target)}\b\s?')
    for line in infile:
        outfile.write(pattern.sub('', line))
        
        
def main():
    target = input("What word would you like to delete from input file?: ")
    # with语句会在代码块执行结束后自动关闭文件,无需手动调用close
    with open('inputFile.txt', 'r', encoding='utf-8') as infile, \
         open('outputFile.txt', 'w', encoding='utf-8') as outfile:
        remove(infile, outfile, target)

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:36:43