How to search and replace text in a file?

前端 未结 15 2196
傲寒
傲寒 2020-11-21 20:29

How do I search and replace text in a file using Python 3?

Here is my code:

import os
import sys
import fileinput

print (\"Text to search for:\")
te         


        
相关标签:
15条回答
  • 2020-11-21 21:06

    With a single with block, you can search and replace your text:

    with open('file.txt','r+') as f:
        filedata = f.read()
        filedata = filedata.replace('abc','xyz')
        f.truncate(0)
        f.write(filedata)
    
    0 讨论(0)
  • 2020-11-21 21:06

    My variant, one word at a time on the entire file.

    I read it into memory.

    def replace_word(infile,old_word,new_word):
        if not os.path.isfile(infile):
            print ("Error on replace_word, not a regular file: "+infile)
            sys.exit(1)
    
        f1=open(infile,'r').read()
        f2=open(infile,'w')
        m=f1.replace(old_word,new_word)
        f2.write(m)
    
    0 讨论(0)
  • 2020-11-21 21:06

    I modified Jayram Singh's post slightly in order to replace every instance of a '!' character to a number which I wanted to increment with each instance. Thought it might be helpful to someone who wanted to modify a character that occurred more than once per line and wanted to iterate. Hope that helps someone. PS- I'm very new at coding so apologies if my post is inappropriate in any way, but this worked for me.

    f1 = open('file1.txt', 'r')
    f2 = open('file2.txt', 'w')
    n = 1  
    
    # if word=='!'replace w/ [n] & increment n; else append same word to     
    # file2
    
    for line in f1:
        for word in line:
            if word == '!':
                f2.write(word.replace('!', f'[{n}]'))
                n += 1
            else:
                f2.write(word)
    f1.close()
    f2.close()
    
    0 讨论(0)
  • 2020-11-21 21:07

    Your problem stems from reading from and writing to the same file. Rather than opening fileToSearch for writing, open an actual temporary file and then after you're done and have closed tempFile, use os.rename to move the new file over fileToSearch.

    0 讨论(0)
  • 2020-11-21 21:07

    I have done this:

    #!/usr/bin/env python3
    
    import fileinput
    import os
    
    Dir = input ("Source directory: ")
    os.chdir(Dir)
    
    Filelist = os.listdir()
    print('File list: ',Filelist)
    
    NomeFile = input ("Insert file name: ")
    
    CarOr = input ("Text to search: ")
    
    CarNew = input ("New text: ")
    
    with fileinput.FileInput(NomeFile, inplace=True, backup='.bak') as file:
        for line in file:
            print(line.replace(CarOr, CarNew), end='')
    
    file.close ()
    
    0 讨论(0)
  • 2020-11-21 21:08

    Late answer, but this is what I use to find and replace inside a text file:

    with open("test.txt") as r:
      text = r.read().replace("THIS", "THAT")
    with open("test.txt", "w") as w:
      w.write(text)
    

    DEMO

    0 讨论(0)
提交回复
热议问题