Python os.fdopen() 方法



Python OS 模块的 fdopen() 方法接受文件描述符作为参数值,并返回相应的文件对象。这允许我们执行所有定义的操作,例如对给定的文件对象进行读取和写入。

术语 file descriptor 可以定义为一个整数值,用于从内核为每个进程保留的打开文件块中标识打开的文件。

语法

以下是 Python fdopen() 方法的语法 -


 os.fdopen(fd, [, mode[, bufsize]]);

参数

Python os.fdopen() 方法接受以下参数 -

  • fd − 这是要为其返回文件对象的文件描述符。
  • mode − 此可选参数是一个字符串,指示如何打开文件。最常用的 mode 值是 'r' 用于读取,'w' 用于写入(如果文件已存在,则截断文件)和 'a' 用于附加。
  • bufsize − 此可选参数指定文件所需的缓冲区大小:0 表示无缓冲,1 表示行缓冲,任何其他正值表示使用(大约)该大小的缓冲区。

返回值

Python os.fdopen() 方法返回一个连接到文件描述符的打开文件对象。

以下示例显示了 fdopen() 方法的用法。在这里,我们将打开一个具有读取和写入权限的文件。然后,我们在读取给定文件的文本之前和之后检查 I/O 指针位置。


#!/usr/bin/python
import os, sys
# Open a file
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# Now get a file object for the above file.
fo = os.fdopen(fd, "w+")
# Tell the current position
print ("Current I/O pointer position :%d" % fo.tell())
# Write one string
fo.write( "Python is a great language.\nYeah its great!!\n");
# Now read this file from the beginning.
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("Read String is : ", str)
# Tell the current position
print ("Current I/O pointer position :%d" % fo.tell())
# Close opened file
fo.close()
print ("Closed the file successfully!!")

当我们运行上述程序时,它会产生以下结果——

Current I/O pointer position :0
Read String is : b'Python is a great language.\nYeah its great!!\n'

Current I/O pointer position :45
Closed the file successfully!!

要为给定的文件描述符指定行缓冲区,请将值为 1 的缓冲区大小作为参数传递给 fdopen(),如下面的代码所示。


import os

# Open a file descriptor
fd = os.open("txtFile.txt", os.O_RDWR|os.O_CREAT)

# file object with 1-byte line buffer
with os.fdopen(fd, 'w+', buffering=1) as file:
	 	file.write("This is qikepu.")
	 	file.seek(0)
	 	print(file.read())

上面的程序将显示以下输出 -

This is qikepu.