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

