1

Python を使用してテキスト ファイルの各行のテキストをパスに置き換えたいのですが、出力ファイルのパスに奇妙な文字 (四角形) が表示されます。

現在のコード:

#!/usr/bin/env python

f1 = open('input.txt', 'r')
f2 = open('output.txt', 'w')
for line in f1:
    f2.write(line.replace('test/software', 'C:\Software\api\render\3bit\sim>'))
f1.close()
f2.close()

出力テキストでは、パス内の次の文字が四角形 (奇妙な文字) に置き換えられます。

  • \a = 正方形に変更
  • \r = 正方形に変更
  • \3 = 正方形に変更

私のコードに何か問題がありますか、それとも上記の文字はシステム用に予約されていますか?

4

3 に答える 3

5

Python 文字列はエスケープ コードをサポートしています。特定の文字のバックスラッシュは、それらが表すコードに置き換えられます。\rは ASCII 改行文字として解釈されます。たとえば、\aは ASCII BELL であり\3、ASCII コードポイント 3 (8 進数) として解釈されます。Python文字列リテラルのドキュメントを参照してください。

r解釈されるエスケープ コードを無効にするには、文字列定義の前に:を付けて生の Python 文字列を使用します。

r'C:\Software\api\render\3bit\sim>'

あなたの行は次のようになります:

f2.write(line.replace('test/software', r'C:\Software\api\render\3bit\sim>'))

または、バックスラッシュを二重にして、代わりにリテラルのバックスラッシュとして解釈させます。

'C:\\Software\\api\\render\\3bit\\sim>'
于 2013-03-15T16:50:07.647 に答える
0

各パス ファイルの前に「r」文字を追加して生の文字列を作成すると、問題が解決する場合があります。例:

f2.write(line.replace('test/software', r'C:\Software\api\render\3bit\sim>'))

または、バックスラッシュをエスケープします。

f2.write(line.replace('test/software', 'C:\\Software\\api\\render\\3bit\\sim>'))
于 2013-03-15T16:52:14.103 に答える
0

文字列には、Python でエスケープ コードとして読み取られるバックスラッシュが含まれています。これらは、バックスラッシュが前にある文字が特殊文字に変更された場合です。たとえば\n、改行です。それらを (別のバックスラッシュで) エスケープするか、そのままの文字列を使用する必要があります。

r'C:\Software\api\render\3bit\sim>'
于 2013-03-15T16:51:06.350 に答える