0

私はpyton 2.7を使用しています。スクリプトを作成しました。実行すると、abc.py という名前の他のファイルを呼び出して実行します。しかし、私はエラーが発生しています

IOError: [Errno 22] invalid mode ('r') or filename: 'F:\x07bc.c'

ファイル名を変更すると正常に動作します。ファイル名の最初の文字として a から f までの文字を使用した場合にのみエラーが表示されます。ありがとうございました

4

3 に答える 3

5

Python string を考えてみましょう'\a'ドキュメントで説明されているように、バック スラッシュ文字はエスケープ文字として解釈されます。実際'\a'、ASCII ベル文字、文字番号 7 も同様です。

ファイル名は'F:\abc.c'で、\aそこにある は ASCII Bell として解釈されます。これは、インタープリターで明確に確認できます。

>>> 'F:\abc.c'
'F:\x07bc.c'
>>> print 'F:\abc.c'
F:bc.c

\aその文字列を印刷すると、が表示されないことに注意してください。それは目に見えないベルのコントロールキャラクターに変わっているからです。

バックスラッシュを含めるには、正しいエスケープ シーケンスを使用できます\\。すべてをまとめると、ファイル名は次のようになります'F:\\abc.c'。別の方法として、文字列の前にrを付けて生の文字列にすることもできます。これについては、ドキュメントでも詳しく説明されています。

>>> 'F:\\abc.c'
'F:\\abc.c'
>>> print 'F:\\abc.c'
F:\abc.c
>>> r'F:\abc.c'
'F:\\abc.c'
>>> print r'F:\abc.c'
F:\abc.c
于 2012-11-29T09:39:58.757 に答える
1

これを試して:

open(r'F:\abc.c')

つまり、r引用符の前に追加します。

更新申し訳ありませんが、コードを誤解しました(私の解決策は正しいですが)。@DavidHeffernan は正しく、\aASCII ベルとして読み取られます。

于 2012-11-29T09:26:11.110 に答える
1

Escape the \ with another backslash, like this:

print 'F:\\x07bc.c'
于 2012-11-29T09:27:10.727 に答える