files_io

=Files I/O= This chapter will cover all the basic I/O functions available in Python. For more functions please refere to standard Python documentation. = Printing to the Screen: = The simplest way to produce output is using the //print// statement where you can pass zero or more expressions, separated by commas. This function converts the expressions you pass it to a string and writes the result to standard output as follows: code #!/usr/bin/python

print "Python is really a great language,", "isn't it?"; code || This would produce following result on your standard screen: code Python is really a great language, isn't it? code || = Reading Keyboard Input: = Python provides two built-in functions to read a line of text from standard input, which by default comes from the keyboard. These functions are: > >
 *  raw_input
 *  input

The //raw_input// Function:
The //raw_input([prompt])// function reads one line from standard input and returns it as a string (removing the trailing newline): code #!/usr/bin/python

str = raw_input("Enter your input: "); print "Received input is : ", str code || This would prompt you to enter any string and it would display same string on the screen. When I typed "Hello Python!", it output is like this: code Enter your input: Hello Python Received input is : Hello Python code ||

The //input// Function:
The //input([prompt])// function is equivalent to raw_input, except that it assumes the input is a valid Python expression and returns the evaluated result to you: code #!/usr/bin/python

str = input("Enter your input: "); print "Received input is : ", str code || This would produce following result against the entered input: code Enter your input: [x*5 for x in range(2,10,2)] Recieved input is : [10, 20, 30, 40] code || = Opening and Closing Files: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Until now, you have been reading and writing to the standard input and output. Now we will see how to play with actual data files. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Python provides basic functions and methods necessary to manipulate files by default. You can do your most of the file manipulation using a **file** object.

The //open// Function:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Before you can read or write a file, you have to open it using Python's built-in //open// function. This function creates a **file** object which would be utilized to call other support methods associated with it.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">file object = open(file_name [, access_mode][, buffering]) code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Here is paramters detail: > > > <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Here is a list of the different modes of opening a file:
 * <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: left;"> **file_name:** The file_name argument is a string value that contains the name of the file that you want to access.
 * <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: left;"> **access_mode:** The access_mode determines the mode in which the file has to be opened ie. read, write append etc. A complete list of possible values is given below in the table. This is optional parameter and the default file access mode is read (r)
 * <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: left;"> **buffering:** If the buffering value is set to 0, no buffering will take place. If the buffering value is 1, line buffering will be performed while accessing a file. If you specify the buffering value as an integer greater than 1, then buffering action will be performed with the indicated buffer size. If negative, the buffer size is the system default(default behavior).
 * ~ Modes ||~ Description ||
 * r || Opens a file for reading only. The file pointer is placed at the beginning of the file. This is the default mode. ||
 * rb || Opens a file for reading only in binary format. The file pointer is placed at the beginning of the file. This is the default mode. ||
 * r+ || Opens a file for both reading and writing. The file pointer will be at the beginning of the file. ||
 * rb+ || Opens a file for both reading and writing in binary format. The file pointer will be at the beginning of the file. ||
 * w || Opens a file for writing only. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing. ||
 * wb || Opens a file for writing only in binary format. Overwrites the file if the file exists. If the file does not exist, creates a new file for writing. ||
 * w+ || Opens a file for both writing and reading. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing. ||
 * wb+ || Opens a file for both writing and reading in binary format. Overwrites the existing file if the file exists. If the file does not exist, creates a new file for reading and writing. ||
 * a || Opens a file for appending. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing. ||
 * ab || Opens a file for appending in binary format. The file pointer is at the end of the file if the file exists. That is, the file is in the append mode. If the file does not exist, it creates a new file for writing. ||
 * a+ || Opens a file for both appending and reading. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing. ||
 * ab+ || Opens a file for both appending and reading in binary format. The file pointer is at the end of the file if the file exists. The file opens in the append mode. If the file does not exist, it creates a new file for reading and writing. ||

The //file// object atrributes:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Once a file is opened and you have one //file// object, you can get various information related to that file. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Here is a list of all attributes related to file object:
 * ~ Attribute ||~ Description ||
 * file.closed || Returns true if file is closed, false otherwise. ||
 * file.mode || Returns access mode with which file was opened. ||
 * file.name || Returns name of the file. ||
 * file.softspace || Returns false if space explicitly required with print, true otherwise. ||

Example:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python

fo = open("foo.txt", "wb") print "Name of the file: ", fo.name print "Closed or not : ", fo.closed print "Opening mode : ", fo.mode print "Softspace flag : ", fo.softspace code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">This would produce following result: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">Name of the file: foo.txt Closed or not : False Opening mode : wb Softspace flag :  0 code ||
 * 1) Open a file

The //close// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The close method of a //file// object flushes any unwritten information and closes the file object, after which no more writing can be done. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Python automatically closes a file when the reference object of a file is reassigned to another file. It is a good practice to use the close method to close a file.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">fileObject.close; code ||

Example:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python

fo = open("foo.txt", "wb") print "Name of the file: ", fo.name
 * 1) Open a file

fo.close code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">This would produce following result: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">Name of the file: foo.txt code || = Reading and Writing Files: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //file// object provides a set of access methods to make our lives easier. We would see how to use //read// and //write// methods to read and write files.
 * 1) Close opend file

The //write// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //write// method writes any string to an open file. It is important to note that Python strings can have binary data and not just text. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The write method does not add a newline character ('\n') to the end of the string:

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">fileObject.write(string); code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Here passed parameter is the content to be written into the opend file.

Example:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python

fo = open("foo.txt", "wb") fo.write( "Python is a great language.\nYeah its great!!\n");
 * 1) Open a file

fo.close code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The above method would create //foo.txt// file and would write given content in that file and finally it would close that file. If you would open this file, it would have following content code <span style="font-family: 'Courier New',monospace; font-size: 12px;">Python is a great language. Yeah its great!! code ||
 * 1) Close opend file

The //read// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //read// method read a string from an open file. It is important to note that Python strings can have binary data and not just text.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">fileObject.read([count]); code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Here passed parameter is the number of bytes to be read from the opend file. This method starts reading from the beginning of the file and if //count// is missing then it tries to read as much as possible, may be until the end of file.

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Let's take a file //foo.txt// which we have created above. code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python

fo = open("foo.txt", "r+") str = fo.read(10); print "Read String is : ", str fo.close code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">This would produce following result: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">Read String is : Python is code || = File Positions: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //tell// method tells you the current position within the file in other words, the next read or write will occur at that many bytes from the beginning of the file: <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //seek(offset[, from])// method changes the current file position. The //offset// argument indicates the number of bytes to be moved. The //from// argument specifies the reference position from where the bytes are to be moved. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">If //from// is set to 0, it means use the beginning of the file as the reference position and 1 means use the current position as the reference position and if it is set to 2 then the end of the file would be taken as the reference position.
 * 1) Open a file
 * 1) Close opend file

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Let's take a file //foo.txt// which we have created above. code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python

fo = open("foo.txt", "r+") str = fo.read(10); print "Read String is : ", str
 * 1) Open a file

position = fo.tell; print "Current file position : ", position
 * 1) Check current position

position = fo.seek(0, 0); str = fo.read(10); print "Again read String is : ", str fo.close code || <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">This would produce following result: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">Read String is : Python is Current file position :  10 Again read String is : Python is code || = Renaming and Deleting Files: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Python **os** module provides methods that help you perform file-processing operations, such as renaming and deleting files. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">To use this module you need to import it first and then you can all any related functions.
 * 1) Reposition pointer at the beginning once again
 * 1) Close opend file

The rename Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //rename// method takes two arguments, the current filename and the new filename.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.rename(current_file_name, new_file_name) code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to rename an existing file //test1.txt//: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.rename( "test1.txt", "test2.txt" )
 * 1) Rename a file from test1.txt to test2.txt

code ||

The //delete// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">You can use the //delete// method to delete files by supplying the name of the file to be deleted as the argument.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.delete(file_name) code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to delete an existing file //test2.txt//: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.delete("text2.txt") code || = Directories in Python: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">All files are contained within various directories, and Python has no problem handling these too. The **os** module has several methods that help you create, remove, and change directories.
 * 1) Delete file test2.txt

The //mkdir// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">You can use the //mkdir// method of the os module to create directories in the current directory. You need to supply an argument to this method, which contains the name of the directory to be created.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.mkdir("newdir") code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to create a directory //test// in the current directory: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.mkdir("test") code ||
 * 1) Create a directory "test"

The //chdir// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">You can use the //chdir// method to change the current directory. The chdir method takes an argument, which is the name of the directory that you want to make the current directory.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.chdir("newdir") code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to go into "/home/newdir" directory: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.chdir("/home/newdir") code ||
 * 1) Changing a directory to "/home/newdir"

The //getcwd// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //getcwd// method displays the current working directory.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.getcwd code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to give current directory: code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.getcwd code ||
 * 1) This would give location of the current directory

The //rmdir// Method:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">The //rmdir// method deletes the directory, which is passed as an argument in the method. <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Before removing a directory, all the contents in it should be removed.

Syntax:
code <span style="font-family: 'Courier New',monospace; font-size: 12px;">os.rmdir('dirname') code ||

Example:
<span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">Following is the example to remove "/tmp/test" directory. It is required to give fully qualified name of the directory otherwise it would search for that directory in the current directory. code <span style="font-family: 'Courier New',monospace; font-size: 12px;">#!/usr/bin/python import os

os.rmdir( "/tmp/test" ) code || = File & Directory Related Methods: = <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: justify;">There are three important sources which provide a wide range of utility methods to handle and manipulate files & directories on Windows and Unix operating systems. They are as follows: >
 * 1) This would  remove "/tmp/test"  directory.
 * <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: left;"> [|File Object Methods] : The //file// object provides functions to manipulate files.
 * <span style="background-color: #ffffff; font-family: verdana,helvetica,arial,sans-serif; font-size: 11px; text-align: left;"> [|OS Object Methods.] : This provides methods to process files as well as directories.