2013-02-28 9 views
17

理由はわかりませんが、出力ファイルのファイル名に "region"があるときはいつでもこのエラー:地域:IOError:[Errno 22]無効なモード( 'w')またはファイル名

例外IOError:[errnoを22]無効なモード( 'W')またはファイル名: 'パスの\ regionlog.txt'

それは、"region.txt"ためにこれを行い、" logregion.txt "など

class writeTo: 
    def __init__(self, stdout, name): 
     self.stdout = stdout 
     self.log = file(name, 'w') #here is where it says the error occurs 

output = os.path.abspath('path\regionlog.txt') 
writer = writeTo(sys.stdout, output) #and here too 

これはなぜですか?私は本当に私のファイル "regionlog.txt"の名前を付けたいですが、それはそのエラーを思い付いていきます。その周りに道がありますか?

答えて

26

使用スラッシュ:

'path/regionlog.txt' 

またはraw文字列を:

r'path\regionlog.txt' 

あるいは、少なくとも、あなたのバックスラッシュをエスケープ:

'path\\regionlog.txt' 

 

\rはキャリッジリターンです。

 

別のオプション:os.path.joinを使用して、すべてのスラッシュを心配する必要はありません。

output = os.path.abspath(os.path.join('path', 'regionlog.txt')) 
+1

第三のオプションでは "\ R" インスタンスを変更しています。 –

+1

第4オプション: 'os.path.join'を使います。 OPはすでに 'os.path'をインポートしました。 –

1
C標準言語で

\t\n\rはエスケープ文字です。 \tは、次のTAB位置を横断します。 \nは改行で、\rは送料の返品となります。 \\rまたは/rを使用すると問題が解決します。

+0

次回は、あなたの '\\ r'が' \ r'のように表示されているので、あなたが入力したものが画面上で正しく出てきていることを確認してください。 –

0

別の簡単な解決策は、ファイル名のパスには "\ R"

関連する問題