python - Python 3 在系统调用中转义引号
问题描述
我正在尝试通过使用 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(s)
有效。
在纯python中,用文字替换换行符\n
(改编自我的另一个答案):
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)
推荐阅读
- gatling - 加特林检查soap响应是否包含节点
- java - 设备进入睡眠模式时服务无法正常工作
- python - 熊猫在 groupby 对象上应用 groupby
- kubernetes - GCE Ingress 未从就绪探测中获取健康检查
- python - 提供在烧瓶应用程序中下载 mpld3 图作为图像的选项
- ios - 从 SCNScene url 获取下载进度
- java - Swing - 从 JFileChooser 中选择的 JTree 多个根文件夹
- navision - 尝试将 PowerApps 与 Microsoft Navision 2016 连接时总是遇到以下错误
- geolocation - 地理定位中没有出现蓝点(Ionic 3)
- html - 如何删除面包屑的最后一个边框