Home > Blockchain >  Find and replace certain texts in file using python
Find and replace certain texts in file using python

Time:01-15

I have the following textfile:

1-   VERSION_CONTROL {
2-   FILE_NAME = "foo.cmp";
3-   REVISION = "";
4-   AUTHOR = "doo";
5-   DATE = "Date: ";
6-   }
7-   
8-   CVTS {
9-   CVTLIST = {
10-   {
11-   CVT = "foo";
12-   }
13-   }
14-   }
15-   IFREAL {
16-   LOADLIST = "";
17-   UNLOADLIST = "";
18-   IOMAPLIST = {
19-   }
20-   }
21-   IFSIM {
22-   SIMULATIONS = {
23-   SIMULATION {
24-   NAME = "";
25-   PROGRAM = "foo.zip";
26-   
27-   RATE = "1";
28-  OFFSET = "0";
29-   SUBFRAME = "0";
30-   LENGTH = "1";
31-   ARGUMENTS = "";
32-   OPTIONS = "RT";
33-   LOOPS = "1";
34-   cpumask = "0";
35-   }
36-   }
37-   LOADLIST = "";
38-   UNLOADLIST = "";
39-   }
40-  

I'm trying to replace the variable LOADLIST = ""; with LOADLIST = "init";However, only on line 37. My solution so far:

reading_file = open(myFile.txt,"r") 
               
               new_file_content = ""
               for line in reading_file:
                   stripped_line = line.strip()
                   new_line = stripped_line.replace('LOADLIST = "";', 'LOADLIST = "initScwss";')
                   new_file_content  = new_line  "\n"
               reading_file.close()

               writing_file = open(entry, "w")
               writing_file.write(new_file_content)
               writing_file.close()

The problem with my code is that it fills the LOADLIST everywhere it finds which means in lines 16,17, 37 & 38.

Any idea how to filter the search such that only the line 37 is considered? Thanks in advance

CodePudding user response:

Assuming you can't change your txt file to json, if you are looking to only change the LOADLIST that comes after IFSIM, you could use state-fullness to check that the loop has reached IFSIM.

entry = "outfile.txt"

reading_file = open("myFile.txt","r")

new_file_content = ""
isIfsim = False
for line in reading_file:
    stripped_line = line.strip()
    if "IFSIM" in stripped_line:
        isIfsim = True
    if isIfsim:
        if 'LOADLIST = "";' in stripped_line:
            new_line = stripped_line.replace('LOADLIST = "";', 'LOADLIST = "init";')
            new_file_content  = new_line  "\n"
            isIfsim = False
        else:
            new_file_content  = stripped_line  "\n"
    else:
        new_file_content  = stripped_line  "\n"
reading_file.close()

writing_file = open(entry, "w")
writing_file.write(new_file_content)
writing_file.close()
  •  Tags:  
  • Related