我正在编写一段代码,在其中我希望它进入主终端并剥离我的 [] 和 '' 数据集但是当我包含 '' 部分时,python 认为我刚刚完成了字符串(我认为)还有另一种方法可以做到这一点。这是我的代码:
com=['cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt']
s0=''
com=s0.join(com)
res=os.system(com)
python 不承认我希望在终端中执行整行,特别是中间部分的''。
'cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2'
没有做你认为的事情,例如:
>>> print 'cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2'
cat new.txt | tr -d "s/,[]*//g" >meantenbri.txt2
请注意,中间的那两个单引号消失了,这是因为您实际上有两个单独的字符串并排在一起,'cat new.txt | tr -d "s/,[]'
并且
'*//g" >meantenbri.txt2'
解释器将这些字符串连接在一起。要在字符串中实际包含这些单引号,有几个选项:
com = """cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt2"""
转义中间的单引号:
com = 'cat new.txt | tr -d "s/,[]\'\'*//g" >meantenbri.txt2'
请注意,整个com = [...]
, s0 = ''
,com = ''.join(com)
确实是不必要的,只需com
通过删除方括号从头开始创建为字符串。
作为旁注,subprocess.Popen()
优先os.system()
于运行外部程序。我认为在这种情况下,它看起来像这样(未经测试):
import subprocess
cmd = ['tr', '-d', "s/,[]''*//g"]
p = subprocess.Popen(cmd, stdin=open('new.txt'),
stdout=open('meantenbri.txt2', 'w'))
p.communicate()
res = p.returncode
尽管正如 Sven 在评论中提到的那样,这不是您应该首先使用外部程序的东西。
改用三引号字符串:
com = ["""cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt"""]
python 实际上有 4 种类型的引号供您使用:
'...'
"...:
"""..."""
'''...'''
(三重引号也适用于多行):
"""foo
bar"""
当然,如果你真的很紧张,你可以用反斜杠转义引号——但是有这么多不同类型的引号可供你使用,它似乎很少需要。
com=['cat new.txt | tr -d "s/,[]\'\'*//g" >meantenbri.txt2']
用 \ 逃脱它们