3

私のスクリプトは、ファイルパスをファイルタイプのサフィックスと連結することにより、エクスポートするファイルを作成します。例えば、

int = 3
print r"C:\Test\\" + str(int) + ".jpg"

これはC:\Test\\3.jpg

最初に「r」を含めたので、生の文字列として扱われるので、最後に二重の円記号は必要ないと思いました。ただし、以下は機能しません。

int = 3
print r"C:\Test\" + str(int) + ".jpg"

...おそらくPythonが終了引用符の前にエスケープ文字を見ているためです。では、「r」のポイントは何ですか?また、エクスポート時にファイルが適切な場所に保存されますが、printコマンドでテスト後に2つのバックスラッシュ(C:\ Test \ 3.jpgなど)が表示され、C:の後に1つだけ表示されるのは気に入らないです。

ファイルパスでバックスラッシュを1つ取得するにはどうすればよいですか?

4

3 に答える 3

6

文字列操作を使用してファイルパスを作成しようとしないでください。Pythonにはそのos.pathためのモジュールがあります:

import os.path
i = 3
print os.path.join("C:\Test", str(i) + ".jpg")

これにより、パスが適切に構築されます。

int(また、組み込み関数をシャドウイングするため、整数を呼び出さないでくださいint()。)

于 2012-12-11T10:51:37.017 に答える
5

生の文字列であっても、文字列の引用符は円記号でエスケープできますが、円記号は文字列に残ります。たとえば、r"\""バックスラッシュと二重引用符の2文字で構成される有効な文字列リテラルです。r"\"は有効な文字列リテラルではありません(生の文字列でさえ、奇数の円記号で終了することはできません)。具体的には、生の文字列を単一のバックスラッシュで終了することはできません(バックスラッシュは次の引用文字をエスケープするため)。また、単一の円記号とそれに続く改行は、行の継続としてではなく、文字列の一部としての2つの文字として解釈されることにも注意してください。

ソース

だから、それはそのようには機能しません。生の文字列を使用したいが、末尾に円記号がある場合は、後でそれを個別に追加する必要があります。

>>> r'C:\Test' + '\\'
'C:\\Test\\'

または、場合によっては、文字列の書式設定を使用して値を挿入することもできます。

>>> r'C:\Test\{0}.jpg'.format(i)
'C:\\Test\\1.jpg'

または、os.path.joinパスを作成するために使用します。

>>> os.path.join(r'C:\Test', str(i) +'.jpg')
'C:\\Test\\1.jpg'
于 2012-12-11T10:54:50.560 に答える
0

まず、組み込みのint()関数をシャドウするため、整数のintを呼び出さないでください。
os.pathの使用は非常に賢い方法です:

import os.path
i = 3
print os.path.join("C:\Test", str(i) + ".jpg")
#C:\Test\3.jpg

または、ファイルパスを作成するために文字列を使用して操作する必要があります。

_prefix = 'C:\Test'
i = 3
print _prefix + '\\' + str(i) + '.jpg'
#C:\Test\3.jpg
于 2012-12-11T12:12:20.740 に答える