Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

modified textfile python script

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

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

$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.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading