Python - How To Replace a Line in a File in Python

ID : 407

viewed : 327

Tags : PythonPython File

vote vote

94

File handling is considered an essential aspect of any web application. Similar to most programming languages, Python is perfectly capable of supporting file handling. It allows you to deal with files of different types, essentially to perform some basic operations like reading and writing. It also provides some other file handling options to operate the files.

This tutorial demonstrates the different methods available to replace a line in a file in Python.

To demonstrate the different ways to replace a line in a file in this article, we will take a text file, motivation.txt.

Text file (motivation.txt):

There are always second chances in life. Anybody can bounce back from hardships. The hardships that we face are just a test to check our will. A strong will is all it takes to bounce back from a loss. 

The path of the storage directory of this file might be different in the reader’s computer; therefore, it is advised to adjust accordingly.

Use the for Loop Along With the replace() Function to Replace a Line in a File in Python

The open() function is utilized to open a file in Python. The file can be opened in either format of text or binary, which depends on the programmer. The open() function has various modes, and all of them provide different accessibility options to open a file.

The simple for loop is a conventional way to traverse through every line in the given text file and find the line we want to replace. Then, the desired line can be replaced by using the replace() function. All of this is done in the read mode. Finally, the file is opened in the write mode, and the replaced content is written in the given file.

The following code uses the for loop along with the replace() function.

# opening the file in read mode file = open("motivation.txt", "r") replacement = "" # using the for loop for line in file:     line = line.strip()     changes = line.replace("hardships", "situations")     replacement = replacement + changes + "\n"  file.close() # opening the file in write mode fout = open("motivation.txt", "w") fout.write(replacement) fout.close() 

Create a New File With the Refreshed Contents and Replace the Original File in Python

Several functions are at work to implement this process. The knowledge of the process of all these functions is necessary to execute this method successfully. We need to import several functions from three modules to the Python code.

  • Firstly, we need to import the mkstemp() function from the tempfile module. This function is utilized to return a tuple as an output along with a path and a file descriptor.
    • Then, we need to import two functions from the shutil module. The first function is the copymode() function, which is utilized in copying the permission bits from a source to the destination path. The second function is the move() function, which allows the movement of files from one place to another.
  • Finally, we need to import the remove() function from the OS module. This function allows the deletion of a path.

All these modules need to be imported to the current Python code to run the code without any errors. An example code that implements this way is as follows.

from tempfile import mkstemp from shutil import move, copymode from os import fdopen, remove # storing the path where the file is saved on your device as a variable  path="C:\\Users\Admin\Desktop\python\test\motivation.txt"  def replacement(filepath, hardships, situations):         # Creating a temp file    fd, abspath = mkstemp()    with fdopen(fd,'w') as file1:        with open(filepath,'r') as file0:            for line in file0:                file1.write(line.replace(hardships,situations))    copymode(filepath, abspath)    remove(filepath)    move(abspath, filepath) replacement(path,'hardships','situations') 

Use the fileinput.input() Function for Replacing the Text in a Line in Python

The fileinput.input() method gets the file as the input line by line and is mainly utilized for appending and updating the data in the given file.

The fileinput and sys modules need to be imported to the current Python code in order to run the code without any errors. The following code uses the fileinput.input() function for replacing the text in a line in Python.

import fileinput import sys def replacement(file, previousw, nextw):    for line in fileinput.input(file, inplace=1):        line = line.replace(previousw, nextw)        sys.stdout.write(line) var1 = "hardships" var2 = "situations" file = "motivation.txt" replacement(file, var1, var2) 

Use the re Module to Replace the Text in a Line in Python

The re module is a built-in module that Python provides to programmers that deal with Regular Expression, and it needs to be imported to the code. It helps in performing the task of searching for a pattern in a given particular string.

In this method, we use two functions, namely, re.compile() and re.escape(), from the RegEx module. The re.compile() function is utilized to generate a regular expression object from the regular expression pattern, which is then used for matching. The re.compile() function is utilized to ignore or escape the special characters in Python.

The following code uses several functions from the Regex module to replace the text in a line in Python.

import re def replacement(Path, text, subs, flags=0):   with open(filepath, "r+") as f1:        contents = f1.read()        pattern = re.compile(re.escape(text), flags)        contents = pattern.sub(subs, contents)        f1.seek(0)        f1.truncate()        f1.write(file_contents) filepath="motivation.txt" text="hardships" subs="situations" replacement(filepath, text, subs) 

Here, we also used a sub() function for replacing the given pattern with a string or a result of a specified function.

  • Related HOW TO?