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

3

使用这种形式,它的工作。

with os.fdopen(os.open(filepath,os.O_CREAT | os.O_RDWR ),'w') as fd:  
    fd.write("abcd")
于 2013-10-25T10:35:51.610 回答
0

为了详细说明Rohith 的回答,他们打开文件的方式很重要。

通过with内部调用 seleral 函数来工作,所以我一步一步地尝试了它:

>>> 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__()调用Essentiall f.close(),后者又调用f.flush(),将这个输出缓冲区刷新到磁盘 - 或者至少尝试这样做。

但它失败了,因为该文件不可写。所以[Errno 9] Bad file descriptor出现了。

于 2013-10-25T10:48:39.503 回答