3

以下のように「os.open()」を使用してファイルを開こうとしています

>>> filePath
'C:\\Shashidhar\\text.csv'
>>> fd = os.open(filePath,os.O_CREAT)
>>> with os.fdopen(fd, 'w') as myfile:
...    myfile.write("hello")

IOError: [Errno 9] Bad file descriptor

>>>

接続を自動的に閉じることができるように、「with」を使用して os.fdopen からファイルオブジェクトを開く方法はありますか?

ありがとう

4

2 に答える 2

0

Rohith の答えを詳しく説明するには、ファイルを開く方法が重要です。

内部でセレラルwith関数を呼び出すことで動作するので、ステップバイステップで試してみました:

>>> fd = os.open("c:\\temp\\xyxy", os.O_CREAT)
>>> f = os.fdopen(fd, 'w')
>>> myfile = f.__enter__()
>>> myfile.write("213")
>>> f.__exit__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 9] Bad file descriptor

何?なんで?そして、なぜ今?

私が同じことをしたら

>>> fd = os.open(filepath, os.O_CREAT | os.O_RDWR)

すべて正常に動作します。

write()ファイルオブジェクトの出力パファーに書き込んだだけで、f.__exit__()本質的な呼び出しはf.close()、このf.flush()出力バッファーをディスクにフラッシュするか、少なくともそうしようとします。

しかし、ファイルが書き込み可能でないため、失敗します。ということ[Errno 9] Bad file descriptorが起こります。

于 2013-10-25T10:48:39.503 に答える