Home > Enterprise >  IF condition is not executing even though string is equal
IF condition is not executing even though string is equal

Time:11-12

I have 2 files - file1 and filee2. I want to search a Keyword in file1 and copy the next 2 lines of that keyword in file1 and store in variable. Then search the same keyword in file2 and replace the next 2 lines of the keyword in file2 with the variable.

File1:

enter image description here

file2:

enter image description here

For example I want to find the keyword [default] and copy next 2 lines of [default] then find the [default] in file 2 and replace the next two lines with file1.

CodePudding user response:

Written code for this but IF condition is not executing even it is True.

fn1 = open(r'<path>', 'r')
fn = open(r"<path>","r")
profile = "[default]"

  
# read the content of the file line by line
cont = fn.readlines()
cont1 = fn1.readlines()
#print(type(cont[0]))
#print(type(profile))


for i in range(len(cont)):   
    if str(profile) == (cont[i]):
            #print("IF is passed")
            profile_line1 = cont[i 1]
            profile_line2 = cont[i 2]
            #fn1.write(profile_line1)
            print("profile 1 and 2 is",profile_line1,profile_line2)
    else:
        pass

for i in range(len(cont1)):
    if str(profile) == str(cont1[i]):
        fn1_profile_line1 = cont1[i 1]
        fn1_profile_line2 = cont1[i 2]
        print(fn1_profile_line1)
        print(fn1_profile_line2)
        #fn1.write(profile_line1)
        fn1.replace(cont1[i 1], profile_line1)
        fn1.replace(cont1[i 2], profile_line2)
    else:
        pass


fn.close()
fn1.close()

CodePudding user response:

Here is some code I quickly wrote.

file1 = open("file1.txt", "r")  # opens the files
file2 = open("file2.txt", "r")
file1_contents = [line.replace("\n", "").replace(" ", "")
                  for line in file1.readlines()]  # creates a list of the lines without whitespaces and newlines
file2_contents = [line.replace("\n", "").replace(" ", "")
                  for line in file2.readlines()]
file1.close()  # closes the files
file2.close()

keyword = "[default]"  # keyword to find
# trys to find the keyword in the list
try:
    file1_index = file1_contents.index(keyword)
    file1_vars = [file1_contents[file1_index   1],
                  file1_contents[file1_index   2]]  # stores the two variables after the keyword
    file2_index = file2_contents.index(keyword)
    file2_contents[file2_index   1] = file1_vars[0]  # replaces them in file 2
    file2_contents[file2_index   2] = file1_vars[1]
    file2_contents = [line   "\n" for line in file2_contents]  # adds newlines

    # writes the content back to file 2
    with open("file2.txt", "w") as file:
        file.writelines(file2_contents)
        file.close()
except ValueError:
    pass

CodePudding user response:

Here is your code revised to get through the if statements. You need to remove the "\n" from the cont[i].

fn1 = open(r'<path>', 'r')
fn = open(r"<path>", "r")
profile = "[default]"


# read the content of the file line by line
cont = fn.readlines()
cont1 = fn1.readlines()
# print(type(cont[0]))
# print(type(profile))


for i in range(len(cont)):
    if profile == (cont[i].replace("\n", "")):
        #print("IF is passed")
        profile_line1 = cont[i 1]
        profile_line2 = cont[i 2]
        # fn1.write(profile_line1)
        print("profile 1 and 2 is", profile_line1, profile_line2)
    else:
        pass

for i in range(len(cont1)):
    if profile == cont1[i].replace("\n", ""):
        fn1_profile_line1 = cont1[i 1]
        fn1_profile_line2 = cont1[i 2]
        print(fn1_profile_line1)
        print(fn1_profile_line2)
        # fn1.write(profile_line1)
        fn1.replace(cont1[i 1], profile_line1)
        fn1.replace(cont1[i 2], profile_line2)
    else:
        pass


fn.close()
fn1.close()
  • Related