#python
Вопрос:
У меня есть некоторые проблемы в моей программе. Я пытался придумать скрипт, который сравнивает текстовые файлы с основным текстовым файлом, и программа выводит разницу.
В принципе, это конфигурация сети, и нам нужно сравнить их оптом, чтобы убедиться, что все устройства имеют стандартные конфигурации. Например, скрипт должен прочитать каждый файл (файл1, файл2..и т.д.) строка за строкой и сравнить его с основным файлом (master.txt).
Я могу сравнивать по одному файлу за раз, однако при сравнении двух или более файлов я получаю ошибку «индекс вне диапазона».
Я хочу сравнить несколько файлов, возможно, в сотнях, поэтому мне нужно знать, как исправить его цикл. Поймите, что это может быть связано с тем, что программа пытается подготовиться
import difflib
import sys
hosts0 = open("C:\Users\p1329760\Desktop\Personal\Python\Projects\sample\master.txt","r")
hosts1 = open("C:\Users\p1329760\Desktop\Personal\Python\Projects\sample\file1.txt","r")
hosts2 = open("C:\Users\p1329760\Desktop\Personal\Python\Projects\sample\file2.txt","r")
lines1 = hosts0.readlines()
#print(lines11)
with open('output_compare.txt', 'w') as f:
#global original_stdout
for i,lines2 in enumerate(hosts1):
if lines2 != lines1[i]:
original_stdout = sys.stdout
sys.stdout = f
print("line ", i, " in hosts1 is different n")
print(lines2)
sys.stdout = original_stdout
else:
pass
with open('output_compare1.txt', 'w') as file:
for i,lines3 in enumerate(hosts2):
if lines3 != lines1[i]:
original_stdout = sys.stdout
sys.stdout = file
print("line ", i, " in hosts1 is different n")
print(lines3)
sys.stdout = original_stdout
else:
pass
Комментарии:
1. Ваш код очень повторяющийся и в идеале должен использовать список хостов, по которому вы выполняете итерации для сравнения. Кроме того, существуют всевозможные очень эффективные программы для разделения текста.
2. Вероятно, вы не получили ошибку «вне индекса». Это был «индекс списка вне диапазона». Важно включать сообщения об ошибках дословно. Вы также не сообщили нам, где произошла ошибка (в какой строке кода).
3.
diff3
Команда может это сделать, программирование не требуется.4. @jarmod , да, пропустил, что ошибка «индекс вне диапазона», и это происходит в том случае, если строки 3 != строки 1[i]: .
5. @TimRoberts, я пытаюсь использовать это приложение для сравнения 100 файлов с основным файлом. Думаю, что diff3 может содержать только 3 файла одновременно.
Ответ №1:
Привет, вот что ты мог бы сделать:
У вас может быть список всех имен файлов
namefile = [....]
И функция, которая принимает имя файла
def compare (filename):
fileobj = open(filename)
infile = fileobj.read().split()
for i in range(0,len(infile)):
if infile[i] == masterin[i]:
pass
else:
print(...)
После этого вам необходимо открыть главный файл
master = open( "...")
masterin = master.read().split()
После этого цикл, и все готово
for i in namefile:
compare (i)