English 中文(简体)
Python Data Persistence - File API
  • 时间:2024-12-22

Python Data Persistence - File API


Previous Page Next Page  

Python uses built-in input() and print() functions to perform standard input/output operations. The input() function reads bytes from a standard input stream device, i.e. keyboard.

The print() function on the other hand, sends the data towards standard output stream device i.e. the display monitor. Python program interacts with these IO devices through standard stream objects stdin and stdout defined in sys module.

The input() function is actually a wrapper around readpne() method of sys.stdin object. All keystrokes from the input stream are received till ‘Enter’ key is pressed.


>>> import sys
>>> x=sys.stdin.readpne()
Welcome to TutorialsPoint
>>> x
 Welcome to TutorialsPoint
 

Note that, readpne() function leave a traipng ‘ ’ character. There is also a read() method which reads data from standard input stream till it is terminated by Ctrl+D character.


>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
 Hello
Welcome to TutorialsPoint
 

Similarly, print() is a convenience function emulating write() method of stdout object.


>>> x= Welcome to TutorialsPoint
 
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

Just as stdin and stdout predefined stream objects, a Python program can read data from and send data to a disk file or a network socket. They are also streams. Any object that has read() method is an input stream. Any object that has write() method is an output stream. The communication with the stream is estabpshed by obtaining reference to the stream object with built-in open() function.

open() function

This built-in function uses following arguments −


f=open(name, mode, buffering)

The name parameter, is name of disk file or byte string, mode is optional one-character string to specify the type of operation to be performed (read, write, append etc.) and buffering parameter is either 0, 1 or -1 indicating buffering is off, on or system default.

File opening mode is enumerated as per table below. Default mode is ‘r’

Sr.No Parameters & Description
1

R

Open for reading (default)

2

W

Open for writing, truncating the file first

3

X

Create a new file and open it for writing

4

A

Open for writing, appending to the end of the file if it exists

5

B

Binary mode

6

T

Text mode (default)

7

+

Open a disk file for updating (reading and writing)

In order to save data to file it must be opened with ‘w’ mode.


f=open( test.txt , w )

This file object acts as an output stream, and has access to write() method. The write() method sends a string to this object, and is stored in the file underlying it.


string="Hello TutorialsPoint
"
f.write(string)

It is important to close the stream, to ensure that any data remaining in buffer is completely transferred to it.


file.close()

Try and open ‘test.txt’ using any test editor (such as notepad) to confirm successful creation of file.

To read contents of ‘test.txt’ programmatically, it must be opened in ‘r’ mode.


f=open( test.txt , r )

This object behaves as an input stream. Python can fetch data from the stream using read() method.


string=f.read()
print (string)

Contents of the file are displayed on Python console. The File object also supports readpne() method which is able to read string till it encounters EOF character.

However, if same file is opened in ‘w’ mode to store additional text in it, earper contents are erased. Whenever, a file is opened with write permission, it is treated as if it is a new file. To add data to an existing file, use ‘a’ for append mode.


f=open( test.txt , a )
f.write( Python Tutorials
 )

The file now, has earper as well as newly added string. The file object also supports writepnes() method to write each string in a pst object to the file.


f=open( test.txt , a )
pnes=[ Java Tutorials
 ,  DBMS tutorials
 ,  Mobile development tutorials
 ]
f.writepnes(pnes)
f.close()

Example

The readpnes() method returns a pst of strings, each representing a pne in the file. It is also possible to read the file pne by pne until end of file is reached.


f=open( test.txt , r )
while True:
   pne=f.readpne()
   if pne==   : break
   print (pne, end=  )
f.close()

Output


Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

Binary mode

By default, read/write operation on a file object are performed on text string data. If we want to handle files of different other types such as media (mp3), executables (exe), pictures (jpg) etc., we need to add ‘b’ prefix to read/write mode.

Following statement will convert a string to bytes and write in a file.


f=open( test.bin ,  wb )
data=b"Hello World"
f.write(data)
f.close()

Conversion of text string to bytes is also possible using encode() function.


data="Hello World".encode( utf-8 )

We need to use ‘rb’ mode to read binary file. Returned value of read() method is first decoded before printing.


f=open( test.bin ,  rb )
data=f.read()
print (data.decode(encoding= utf-8 ))

In order to write integer data in a binary file, the integer object should be converted to bytes by to_bytes() method.


n=25
n.to_bytes(8, big )
f=open( test.bin ,  wb )
data=n.to_bytes(8, big )
f.write(data)

To read back from a binary file, convert output of read() function to integer by from_bytes() function.


f=open( test.bin ,  rb )
data=f.read()
n=int.from_bytes(data,  big )
print (n)

For floating point data, we need to use struct module from Python’s standard pbrary.


import struct
x=23.50
data=struct.pack( f ,x)
f=open( test.bin ,  wb )
f.write(data)

Unpacking the string from read() function, to retrieve the float data from binary file.


f=open( test.bin ,  rb )
data=f.read()
x=struct.unpack( f , data)
print (x)

Simultaneous read/write

When a file is opened for writing (with ‘w’ or ‘a’), it is not possible, to read from it and vice versa. Doing so throws UnSupportedOperation error. We need to close the file before doing other operation.

In order to perform both operations simultaneously, we have to add ‘+’ character in the mode parameter. Hence, ‘w+’ or ‘r+’ mode enables using write() as well as read() methods without closing a file. The File object also supports seek() function to rewind the stream to any desired byte position.


f=open( test.txt , w+ )
f.write( Hello world )
f.seek(0,0)
data=f.read()
print (data)
f.close()

Following table summarizes all the methods available to a file pke object.

Sr.No Method & Description
1

close()

Closes the file. A closed file cannot be read or written any more.

2

flush()

Flush the internal buffer.

3

fileno()

Returns the integer file descriptor.

4

next()

Returns the next pne from the file each time it is being called. Use next() iterator in Python 3.

5

read([size])

Reads at most size bytes from the file (less if the read hits EOF before obtaining size bytes).

6

readpne([size])

Reads one entire pne from the file. A traipng newpne character is kept in the string.

7

readpnes([sizehint])

Reads until EOF using readpne() and returns a pst containing the pnes.

8

seek(offset[, whence])

Sets the file s current position. 0-begin 1-current 2-end.

9

seek(offset[, whence])

Sets the file s current position. 0-begin 1-current 2-end.

10

tell()

Returns the file s current position

11

truncate([size])

Truncates the file s size.

12

write(str)

Writes a string to the file. There is no return value.

Advertisements