Как открыть объект файла из 'os', используя 'с'?
Я пытаюсь открыть файл с помощью "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
>>>
Любая идея, как я могу открыть объект файла из os.fdopen с помощью "с", чтобы соединение могло быть закрыто автоматически?
Спасибо
2 ответа
Используйте эту форму, это сработало.
with os.fdopen(os.open(filepath,os.O_CREAT | os.O_RDWR ),'w') as fd:
fd.write("abcd")
Чтобы уточнить ответ Рохита, важно то, как вы открываете файл.
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()
Вы только записали в выходной файл объект Puffer, и f.__exit__()
основные звонки f.close()
который в свою очередь вызывает f.flush()
, который сбрасывает этот выходной буфер на диск - или, по крайней мере, пытается это сделать.
Но это не удается, так как файл не доступен для записи. Так что [Errno 9] Bad file descriptor
происходит.