I have two files for eg input.txt and output.txt.
input.txt
000000008b8c5200 bcbiubcbueqihd167 0000000056fb2620 akbhjgbfre34168gf 0000000045ab4630 jbshjdb7usvyysdu8 00000000672fa001 jhwdggdiuqwhuhius
output.txt
00000000af16380f avhdhjwqdjdkjdnxk 0000000056fb2620 akbhjgbfre34168gf 0000000045ab4630 jbshjdb7usvyysdu8 000000008b8c5200 bdqjhwdjhfjjehfiu
i have to compare these two files such a way that if first column between two files matches then i have to check for 2nd column and if both matches then it’s okay and if second column doesn’t match then i have to write that data to a file.
that is
if 00000000af16380f is not present in output.txt then i have to write that row in to a file named unmatch.txt.
unmatch.txt:(if address of input.txt doesn’t matches with output.txt)
00000000af16380f avhdhjwqdjdkjdnxk
and if address matches for eg: input.txt and output.txt both have same address then i need to check if thier datas matches. if data is not matching i need to write it in to another file un_data.txt.
un_data.txt
000000008b8c5200 bcbiubcbueqihd167 000000008b8c5200 bdqjhwdjhfjjehfiu
how can i do this?
this is current code:
file_1 = None file_2 = None with open("input.txt) as f_1: file_1 = [line.strip() for line in f_1.readlines()] with open(:output.txt)as f_2: file_2 = [line.strip() for line in f_2.readlines()] file_3 = [] for line in file_1: if line not in file_2: file_3.append(line) file_3 = 'n'.join(file_3) with open("data.txt", "w") as f_3: f_3.write(file_3)
Advertisement
Answer
Based on the information provided, here is what I came up with:
Code has been commented for further explanation:
# ------------------------------------------------------ # IMPORT the text files # ------------------------------------------------------ file_1 = None file_2 = None with open("input.txt") as f_1: file_1 = [line.strip() for line in f_1.readlines()] with open("output.txt")as f_2: file_2 = [line.strip() for line in f_2.readlines()] #------------------------------------------------------- # Function for storing list into a file # ------------------------------------------------------ def list_to_file(my_list, filename): # Convert list to string my_list = 'n'.join(my_list) # Write string to file with open(filename, "w") as f: f.write(my_list) # ---------------------------------------------------------------- # Hold the columns of output.txt into their own respective lists # ---------------------------------------------------------------- f2_addresses = [] f2_data = [] for line_2 in file_2: address_2, data_2 = line_2.split(' ') f2_addresses.append(address_2) f2_data.append(data_2) # -------------------------------------------------------------- # This will hold the lines for the # - un_data.txt file # - unmatch.txt file # ------------------------------------------------------------- un_data_lines = [] unmatch_lines = [] # --------------------------------------------------------------- # Iterate through input.txt and compare against output.txt # --------------------------------------------------------------- for line in file_1: address_1, data_1 = line.split(' ') # Check if address_1 is in output.txt if address_1 in f2_addresses: # Get the index of the address within the f2_addresses list address_index = f2_addresses.index(address_1) # Compare the data columns - if do not match - append lines to un_data_lines if data_1 != f2_data[address_index]: un_data_lines.append(f'{address_1} {data_1}') un_data_lines.append(f'{f2_addresses[address_index]} {f2_data[address_index]}') else: unmatch_lines.append(f'{address_1} {data_1}') # ------------------------------------------ # Store the lists into files # ------------------------------------------ list_to_file(un_data_lines, 'un_data.txt') list_to_file(unmatch_lines, 'unmatch.txt')
OUTPUT:
unmatch.txt
00000000672fa001 jhwdggdiuqwhuhius
un_data.txt
000000008b8c5200 bcbiubcbueqihd167 000000008b8c5200 bdqjhwdjhfjjehfiu