modified textfile python script

Issue

I am totally new in python world. Here I am looking for some suggestion about my problem. I have three text file one is original text file, one is text file for updating original text file and write in a new text file without modifying the original text file. So file1.txt looks like

$ego_vel=x                  
$ped_vel=2
$mu=3
$ego_start_s=4
$ped_start_x=5

file2.txt like

$ego_vel=5
$ped_vel=5
$mu=6
$to_decel=5

outputfile.txt should be like

$ego_vel=5
$ped_vel=5
$mu=6
$ego_start_s=4
$ped_start_x=5
$to_decel=5

the code I tried till now is given below:

import sys
import os
def update_testrun(filename1: str, filename2: str, filename3: str):
   testrun_path = os.path.join(sys.argv[1] + "\\" + filename1)
   list_of_testrun = []
   with open(testrun_path, "r") as reader1:
       for line in reader1.readlines():
          list_of_testrun.append(line)

# print(list_of_testrun)

design_path = os.path.join(sys.argv[3] + "\\" + filename2)
list_of_design = []
with open(design_path, "r") as reader2:
    for line in reader1.readlines():
       list_of_design .append(line)

print(list_of_design)

for i, x in enumerate(list_of_testrun):
   for test in list_of_design:
       
        if x[:9] == test[:9]:
            list_of_testrun[i] = test
            # list_of_updated_testrun=list_of_testrun
            break
updated_testrun_path = os.path.join(sys.argv[5] + "\\" + filename3)
def main():
   update_testrun(sys.argv[2], sys.argv[4], sys.argv[6])
if __name__ == "__main__":
   main()

with this code I am able to get output like this

$ego_vel=5
$ped_vel=5
$mu=3
$ego_start_s=4
$ped_start_x=5
$to_decel=5

all the value I get correctly except $mu value.
Will any one provide me where I am getting wrong and is it possible to share a python script for my task?

Solution

Looks like your problem comes from the if statement:

if x[:9] == test[:9]:

Here you’re comparing the first 8 characters of each string. For all other cases this is fine as you’re not comparing past the ‘=’ character, but for $mu this means you’re evaluating:

if '$mu=3' == '$mu=6'

This obviously evaluates to false so the mu value is not updated.

You could shorten to if x[:4] == test[:4]: for a quick fix but maybe you would consider another method, such as using the .split() string function. This lets you split a string around a specific character which in your case could be ‘=’. For example:

if x.split('=')[0] == test.split('=')[0]:

Would evaluate as:

if '$mu' == '$mu':

Which is True, and would work for the other statements too. Regardless of string length before the ‘=’ sign.

Answered By – rymo

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published