2017-01-06 7 views
0

私のpythonプログラムでは、次のコマンドでシステムコールが必要です。'' Pythonの文字列内

"cat "+transDir+transFile+" | grep \""+fileName+" \" | cut -d\" \" -f2- | sed \"s/ (/=/g\" | cut -d\"=\" -f1 | sed \"s/) /=/g\" | cut -d\"=\" -f2- | sed \"s/''" 

文字列は、「最後は」となっています\「\」文字列にあなたが見ることができるように、この

#look at the last two characters, ie. '' 
'cat ../results/allTrans.txt | grep "Sentence_L3_1 " | cut -d" " -f2- | sed "s/ (/=/g" | cut -d"=" -f1 | sed "s/) /=/g" | cut -d"=" -f2- | sed "s/'\'\''  

のようなものであることが判明しました。どのように私はちょうど得るのですか?

+5

これはちょうどその方法で表示されます( ''は文字列リテラルを表示するために使用されるため)、文字列の実際の内容は変更されませんでした。実際の文字列を見るには 'print some_string'を行います。 – Rusty

+1

文字列の 'repr()'を見ています。 @Rustyが示唆したように、文字列が正常であることがわかります。 – jszakmeister

+0

ラスティは言った。あなたの文字列には本当に最後に2つの ''があります。ところで、 'cat'を使って' grep'にファイルを送るのは反パターンです。 'grep'にファイルargを直接渡すだけです。 –

答えて

4

を平易な英語では:文字列リテラルは、単一引用符で括ることができます。( ')または二重引用符( ")を彼らbackslash()文字は、改行、バックスラッシュそのものなどの特別な意味を持つ文字をエスケープするために使用されます。これらの文字は、3つの単一引用符または二重引用符で囲まれていてもよく、または引用文字。

enter image description here

\'は、'this is your command'と混同している場合は、'をエスケープするために使用します。これは、一重引用符を囲むpython文字列です。それを無視してください。 (通常は外部と通信するために、いくつかのプログラムの入力である)

+1

それは物事をクリアしました、ありがとう。私はstackoverflowが大好き! –

0

そうのような最後の文字列の前にRを入れてみてください: "\"

R | cut -d \ "\" -f2- | "sed" /(/ =/g \ "| cut -d \" = \ "-f1 | sed \" s /)/ =/g \ "| cut -d \ "= \" -f2- | SED \ "S/''"

や問題が解決しない場合、あなたはトリプル引用符で試すことができます

"" "\" | cut -d \ "\" -f2- | "sed" /(/ =/g \ "| cut -d \" = \ "-f1 | sed \" s /)/ =/g \ "| cut -d \ "= \" -f2- | SED \ "S/''" ""

+0

'raw'文字列が何であるかを説明すると素晴らしいでしょう。 –

1

はこれを試してみてください:

print 'cat ../results/allTrans.txt | grep "Sentence_L3_1 " | cut -d" " -f2- | sed "s/ (/=/g" | cut -d"=" -f1 | sed "s/) /=/g" | cut -d"=" -f2- | sed "s/''\'\'' 
1

文字列リテラル表記はない文字列自体は(それは本当にメモリ内にあるものである)あなたが本当にに理解するために必要なものです混乱を避ける。

'\n' = New Line = Binary(12) 
'\\' = \   = Binary(92) 
'\'' = '   = Binary(44) 
'\x80' = <Depends*> = Binary(128) 

左側は、入力を理解するために入力する必要があるものです。右手側はそれが実際にメモリの中にあるものです。

私たちは、これがLine Feedような(制御文字と呼ばれる)一部の文字は、直接キーボードを使って入力することができないためであり、しばしばほとんどの言語を使用してこれらの文字を受け入れるための方法を定義して、ホストアプリケーションに異なる意味を持っている必要がある理由接頭辞として\を付け、次に通常は覚えやすい接尾辞を付けます。 \自体は\\とする必要があります。

'という文字列リテラルを特別な意味を持ち始めた場合は、文字列リテラル表記の末尾と混同しないように、\'とする必要があります。

※エンコードによって異なります。