Python os.fdopen() Method



The fdopen() method of Python OS module accepts a file descriptor as a parameter value and returns a corresponding file object. This allows us to perform all the defined operations, such as reading and writing on the given file object.

The term file descriptor can be defined as an integer value that identifies the open file from a chunk of open files kept by the kernel for each process.

Syntax

Following is the syntax for Python fdopen() method −

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

Parameters

The Python os.fdopen() method accepts the following parameters −

  • fd − This is the file descriptor for which a file object is to be returned.

  • mode − This optional argument is a string indicating how the file is to be opened. The most commonly used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending.

  • bufsize − This optional argument specifies the file's desired buffer size: 0 means unbuffered, 1 means line buffered, and any other positive value means use a buffer of (approximately) that size.

Return Value

The Python os.fdopen() method returns an open file object connected to the file descriptor.

Example

The following example shows the usage of fdopen() method. Here, we are opening a file with read and write permissions. Then, we check the I/O pointer position before and after reading the text of given file.

#!/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!!")

When we run above program, it produces the following result −

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!!

Example

To specify the line buffer for the given file descriptor, pass the buffer size with value 1 as an argument to fdopen() as shown in the below code.

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 tutorialspoint.")
   file.seek(0)
   print(file.read())

The above program will show the following output −

This is tutorialspoint.
python_files_io.htm
Advertisements