使用 python 中的 sed 替换字符串和更新文件
Posted
技术标签:
【中文标题】使用 python 中的 sed 替换字符串和更新文件【英文标题】:Replace strings and update file using sed from python 【发布时间】:2022-01-17 04:25:58 【问题描述】:我试图替换带有双引号的文件的第一行。 该文件包含如下内容:
"A"|"B"|"C"
"1"|"2"|"3"
我想创建或更新文件以显示如下内容(第一行不带双引号):
A|B|C
"1"|"2"|"3"
这通常可以使用 bash 和 sed 来完成:
sed 's/"A"|"B"|"C"/A|B|C/g' inputfile.txt> outputfile.txt
我想使用 subprocess.call() 从 python 实现它
我的代码:
subprocess.call(["sed", 's/"A"|"B"|"C"/A|B|C/g', "inputfile.txt", ">", "outputfile.txt"])
但是它会抛出一个错误:
sed: can't read >: No such file or directory
sed: can't read outputfile.txt: No such file or directory
我想我必须先创建文件 outputfile.txt,但我想从 python 中完成这一切。 你能帮我吗,提前谢谢。
【问题讨论】:
你为什么要从python
中调用sed
?为什么不使用python
自己的字符串操作方法?
当参数是列表时不能使用>
。这是一个 shell 功能,所以你必须使用带有shell=True
的字符串。
@match 我知道该怎么做.. 但我想要这个特定的方法。谢谢
subprocess.call(["sed 's/"A"|"B"|"C"/A|B|C/g' inputfile.txt> outputfile.txt"], shell=True)
@Barmar 我用了这个方法..但由于某种原因不起作用,可能与双引号和单引号混淆
内部双引号需要转义。
【参考方案1】:
要使用>
重定向,您需要使用shell=True
和单个字符串参数,而不是列表。
subprocess.call("""sed 's/"A"|"B"|"C"/A|B|C/g' inputfile.txt > outputfile.txt""", shell=True)
【讨论】:
非常感谢...当我尝试这种方法时,我错过了引号。最好的问候。 你还有额外的[]
。以上是关于使用 python 中的 sed 替换字符串和更新文件的主要内容,如果未能解决你的问题,请参考以下文章