0

私はコードを書いていますが、その途中でメインターミナルに入り、[] と '' のデータセットを取り除きたいのですが、'' の部分を含めると、Python は文字列を仕上げているだけだと考えます(私は思う)私がこれを行うことができる別の方法があります。これが私のコードです:

com=['cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt']
s0=''
com=s0.join(com)
res=os.system(com)

python は、端末で行全体、特に中央セクションの '' を実行したいことを認識しません。

4

3 に答える 3

3

'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

真ん中の 2 つのシングル クォーテーションがなくなっていることに注意して'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が述べたように、これはそもそも外部プログラムを使用する必要があるものではありません。

于 2013-06-04T16:39:56.883 に答える
2

代わりに、三重引用符で囲まれた文字列を使用してください。

com = ["""cat new.txt | tr -d "s/,[]''*//g" >meantenbri.txt"""]

python には、実際に自由に使える 4 種類の引用符があります。

'...'
"...:
"""..."""
'''...'''

(三重引用符の種類は複数行でも機能します):

"""foo
bar"""

もちろん、本当に困っている場合は、バックスラッシュを使用して引用符をエスケープできます。

于 2013-06-04T16:38:59.567 に答える