web-dev-qa-db-ja.com

地域:IOError:[Errno 22]無効なモード( 'w')またはファイル名

理由はわかりませんが、何らかの理由で、出力ファイルのファイル名に「リージョン」があると、このエラーが発生します。

IOError:[Errno 22]無効なモード( 'w')またはファイル名: 'path\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」という名前を付けたいのですが、そのエラーが引き続き発生します。それを回避する方法はありますか?

21
FaerieDrgn

スラッシュを使用します。

'path/regionlog.txt'

または生の文字列:

r'path\regionlog.txt'

または、少なくともバックスラッシュをエスケープします。

'path\\regionlog.txt'

\rは復帰です。


別のオプション:os.path.joinを使用すると、スラッシュについてまったく心配する必要はありません。

output = os.path.abspath(os.path.join('path', 'regionlog.txt'))
32
Pavel Anossov

C標準言語では、\t\n\rはエスケープ文字です。 \tは、次のTAB位置を横切るものです。 \nは改行で、\rは改行です。 \\rまたは/rを使用する必要があります。問題を解決します!

1
JackChen

さらに、Pythonは、SharePoint共有ドライブから50 MBを超えるファイルを開こうとすると、このメッセージを表示します。

https://support.Microsoft.com/en-us/help/2668751/you-cannot-download-more-than-50-mb-or-upload-large-files-when-the-upl

1

別の簡単な解決策は、ファイル名パスの「\ r」インスタンスを「\ R」に変更することです

0
Roee Anuar