我正在尝试使用'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打开文件对象,以便可以自动关闭连接?
由于
答案 0 :(得分:1)
使用此表单,它有效。
with os.fdopen(os.open(filepath,os.O_CREAT | os.O_RDWR ),'w') as fd:
fd.write("abcd")
答案 1 :(得分:0)
详细说明Rohith's answer,他们打开文件的方式非常重要。
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()
只写入文件对象的输出puffer,f.__exit__()
essentiall调用f.close()
,然后调用f.flush()
,将此输出缓冲区刷新到磁盘 - 或者,至少尝试这样做。
但它失败了,因为文件不可写。所以发生[Errno 9] Bad file descriptor
。