subprocess调用sed命令出错
我有一个文本文件,里面有这么一行:
PIXEL_SCALE 1.0 # size of pixel in arc
我想把里面的1.0替换成0.3,
于是我尝试通过Python脚本里的subprocess.call来使用sed命令。
在命令行中,下面这个sed的正则命令运行得很好。
sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt
但是,等效的subprocess.call命令却给我报了一个错误。
subprocess.call(['sed','-i',"'s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/'",'filename.txt'])
sed: -e expression #1, char 1: unknown command: `''
我尝试通过在字符串前加r来把它转换成原始字符串,还尝试了使用.encode("UTF-8")。但是这些都没有效果。
这可能出什么问题呢?
谢谢
3 个回答
0
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这种情况下,我们需要找到问题的根源。通常,我们可以通过查看错误信息来帮助我们理解发生了什么。
错误信息就像是程序在告诉我们:“嘿,我在这里遇到了麻烦!”它们通常会指明出错的地方和原因。理解这些信息可以帮助我们快速定位问题,进而修复代码。
另外,很多时候我们可以在网上找到类似的问题和解决方案,比如在StackOverflow这样的社区。这里有很多经验丰富的程序员分享他们的经验和解决方法,能帮助我们更好地理解和解决问题。
总之,遇到问题时,不要慌张,仔细阅读错误信息,并尝试在网上寻找帮助,这样你会逐渐变得更有经验。
's/(PIXEL_SCALE\s*)[0-9]+[0-9]+/\10.3/'
0
subprocess.call("sed -i 's/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/' filename.txt", shell=True)
这可以工作
3
单引号('
)是命令行中用来分隔内容的符号。因为你不在使用命令行,所以在你的正则表达式周围不需要加上这些符号:
subprocess.call(['sed','-i',r"s/^\(PIXEL_SCALE\s*\)\([0-9]*\.[0-9]*\)/\10.3/",'filename.txt'])
# ^^ ^
另外,我使用了一个叫做 原始字符串 的东西(r"...."
),这样可以防止 Python 误解反斜杠后面的内容。