私はpyton 2.7を使用しています。スクリプトを作成しました。実行すると、abc.py という名前の他のファイルを呼び出して実行します。しかし、私はエラーが発生しています
IOError: [Errno 22] invalid mode ('r') or filename: 'F:\x07bc.c'
ファイル名を変更すると正常に動作します。ファイル名の最初の文字として a から f までの文字を使用した場合にのみエラーが表示されます。ありがとうございました
私はpyton 2.7を使用しています。スクリプトを作成しました。実行すると、abc.py という名前の他のファイルを呼び出して実行します。しかし、私はエラーが発生しています
IOError: [Errno 22] invalid mode ('r') or filename: 'F:\x07bc.c'
ファイル名を変更すると正常に動作します。ファイル名の最初の文字として a から f までの文字を使用した場合にのみエラーが表示されます。ありがとうございました
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
これを試して:
open(r'F:\abc.c')
つまり、r
引用符の前に追加します。
更新申し訳ありませんが、コードを誤解しました(私の解決策は正しいですが)。@DavidHeffernan は正しく、\a
ASCII ベルとして読み取られます。
Escape the \
with another backslash, like this:
print 'F:\\x07bc.c'