web-dev-qa-db-ja.com

変数から生の文字列を出力しますか? (答えが得られない)

変数から生の形式で文字列を出力する方法を見つけようとしています。たとえば、パスのウィンドウに環境変数を追加すると、「C:\ Windows\Users\alexb \」のように見える場合があります:

print(r'C:\\Windows\Users\alexb\')

しかし、変数の前にrを置くことはできません。

test = 'C:\\Windows\Users\alexb\'
print(rtest)

明らかにrtestを印刷しようとします

私もそこを知っています

test = 'C:\\Windows\Users\alexb\'
print(repr(test))

しかし、これは 'C:\ Windows\Users\x07lexb'を返します

test = 'C:\\Windows\Users\alexb\'
print(test.encode('string-escape'))

そのため、テストを使用して、そのパスを保持する変数をRAWで印刷するエレガントな方法があるのではないかと思っています。それだけだったらいいね

print(raw(test))

しかし、そうではありません:(

36
aescript

私は同様の問題を抱えていて、この質問につまずいたが、ニック・オルソン・ハリスの answer のおかげで、解決策は文字列の変更にあることがわかった。

それを解決する2つの方法:

  1. ネイティブpython関数を使用して、必要なパスを取得します。例:

    test = os.getcwd() # In case the path in question is your current directory
    print(repr(test))
    

    これにより、プラットフォームに依存せず、.encode。これがオプションの場合、よりエレガントなソリューションです。

  2. 文字列がパスでない場合は、python文字列と互換性のある方法で、この場合はバックスラッシュをエスケープして定義します。

    test = 'C:\\Windows\\Users\\alexb\\'
    print(repr(test))
    
20
OlavRG

既存の文字列を「生」にすることはできません。リテラルのrプレフィックスはparser;によって理解されます。文字列内のエスケープシーケンスを無視するように指示します。ただし、文字列リテラルが解析されると、生の文字列と「通常の」文字列に違いはありません。たとえば、改行を含む文字列がある場合、実行時に、その改行がエスケープシーケンス_\n_から来たかどうか、三重引用符で囲まれた文字列内のリテラル改行からかどうかを判断する方法がありません!)、chr(10)の呼び出し、ファイルからの読み取り、または他に思い付く可能性のあるもの。これらのメソッドのいずれかから構築された実際の文字列オブジェクトは同じように見えます。

22

生の文字列を保存または操作する前にエスケープ文字を取り除きます。

変数に格納する前に、パス「\」のバックスラッシュをスラッシュ「/」に変更できます。スラッシュをエスケープする必要はありません。

>>> mypath = os.getcwd().replace('\\','/')  
>>> os.path.exists(mypath)  
True  
>>>   
4
DrawT

一般に、文字列変数から生の文字列を作成するには、これを使用します。

string = "C:\\Windows\Users\alexb"

raw_string = r"{}".format(string)

出力:

'C:\\\\Windows\\Users\\alexb'
1
Samer Alkhabbaz

特定の文字列は、\ "の最後にエスケープ文字があるため、入力したとおりに機能しません。引用符で閉じることはできません。

たぶん、私はpythonにまだ非常に新しいので、私はそれを間違っているかもしれません。変数に保存された文字列を生の文字列として再現するジョブ。

次の2つの方法で実行できます。

>>>print("C:\\Windows\Users\alexb\\")

C:\Windows\Users\alexb\

>>>print(r"C:\\Windows\Users\alexb\\")
C:\\Windows\Users\alexb\\

変数に保存します:

test = "C:\\Windows\Users\alexb\\"

Repr()を使用します。

>>>print(repr(test))
'C:\\Windows\Users\alexb\\'

または%rによる文字列置換

print("%r" %test)
'C:\\Windows\Users\alexb\\'

ただし、文字列は一重引用符で再現されるため、後でそれらを削除する必要があります。

1
Bryant Sullivan

私は答えには遅すぎることを知っていますが、これを読んでいる人にとっては、それを行うためのはるかに簡単な方法を見つけました

myVariable = 'This string is supposed to be raw \'
print(r'%s' %myVariable)
0
Jimmynoarms