Python如何将含特殊字符的多行文件内容正确写入新文件?
错误原因
你当前写法的核心问题是:直接将包含特殊字符的文件内容拼接进shell命令字符串,&、引号、换行、#等字符都会被shell识别为控制符做特殊解析。比如&会被判定为后台执行指令,直接把命令拆分为前后两段,才会出现Config: not found的报错,写入流程也会直接中断。
而且绕shell调用echo写入的方式完全没有必要,Python原生的文件操作接口可以完美规避shell特殊字符解析问题,性能也更高。
正确实现方案
方案1:Python原生文件写入(最推荐)
使用Python自带的文件操作接口写入,完全不会触发shell特殊字符解析,推荐优先用with上下文管理语法,会自动处理文件关闭,避免资源泄露:
# 读取源文件 with open("/file.dat", "r", encoding="utf-8") as fr: f = fr.read() # 写入目标文件 with open("t.dat", "w", encoding="utf-8") as fw: fw.write(f)
如果你的需求只是完整复制文件,还可以用更简洁的shutil工具方法:
import shutil shutil.copy("/file.dat", "t.dat")
如果操作的是二进制非文本文件,把打开模式换成rb、wb,去掉encoding参数即可。
方案2:特殊场景需调用shell执行(不推荐)
如果确实有必须通过shell命令写入的场景,需要先对写入内容做shell转义,避免特殊字符被解析:
import os import shlex with open("/file.dat", "r", encoding="utf-8") as fr: f = fr.read() # 用shlex.quote转义内容,避免shell解析特殊字符 cmd = f"echo {shlex.quote(f)} >> t.dat" os.system(cmd)
该方案性能远低于原生写入,仅作为特殊场景参考。
内容的提问来源于stack exchange,提问作者Yael
相关产品推荐
相关产品推荐

