Python3系统调用中的转义引号

Python3系统调用中的转义引号,python,Python,我试图通过使用os.system运行Awk命令,将文本文件中的新行转换为字符串中的“\n”字符: awk '{printf "%s\\n", $0}' /tmp/file 我的问题是转义引号不起作用: $ replace = "awk '{printf \"%s\\n\", $0}' /tmp/file" $ print(replace) awk '{printf "%s\n", $0}' /tmp/file 我也尝试过使用shlex: $ import shlex $ line = "aw

我试图通过使用os.system运行Awk命令,将文本文件中的新行转换为字符串中的“\n”字符:

awk '{printf "%s\\n", $0}' /tmp/file
我的问题是转义引号不起作用:

$ replace = "awk '{printf \"%s\\n\", $0}' /tmp/file"
$ print(replace)
awk '{printf "%s\n", $0}' /tmp/file
我也尝试过使用shlex:

$ import shlex
$ line = "awk '{printf \"%s\\n\", $0}'"
$ lexer = shlex.shlex(line, posix=True)
$ lexer.escapedquotes = "'\""
$ mystring = ','.join(lexer)
$ print(mystring)
awk,{printf "%s\n", $0}
我需要知道如何使用Python运行此awk命令,或者如何将文件中的回车/新行转换为字符串中的“\n”

编辑:下面是一个示例文件:

oneline
twoline

threeline
方法应从此文件返回以下内容:

oneline\ntwoline\n\nthreeline

在这种情况下,您可以使用原始前缀+三重引号:

s = r"""awk '{printf "%s\\n", $0}' /tmp/file"""
print(s)
结果:

awk '{printf "%s\\n", $0}' /tmp/file
所以
os.system
可以正常工作

在纯python中,将换行符替换为literal
\n
(改编自):


这行不通吗
replace=“awk'{printf\\\\\\n\”,$0}'/tmp/file“
,这很管用……我在3个反斜杠处停了下来……没想到第四个反斜杠会有任何好处:)你想用单字符
'\n'
'\0a'
)还是用两个字符
'\\\\'
'n'
('\x5d\x6e'))?您的纯python方法不会压缩文件…它只是在应该添加的地方添加一堆“\n”。示例文件:asd ffd您的方法创建此文件:asd\n ffd\n\n应在何处创建此文件:asdffd\n您可以编辑问题以查看输入和预期输出吗?因为评论中不清楚。添加了一个带有预期输出的示例。一般来说,从python调用
awk
sed
不是一个好主意,因为这会使脚本不可移植,并执行系统调用,从而打破异常链,而在纯python中,一切都可以做得更简单。
with open(file1,"rb") as f:
   contents = f.read().replace(b"\n",b"\\n")
with open(file1+".bak","wb") as f:
   f.write(contents)
os.remove(file1)
os.rename(file1+".bak",file1)