Пока это мой код. Я пытаюсь сравнить файлы, предоставленные пользователем, и распечатать, если содержимое обоих файлов одинаково. Если это то же строковое содержимое, которое я хотел бы напечатать Yes, если нет, напечатать No вместе со словами внутри обоих файлов.
print ('Enter the first file name: ', end = '')
FIRST_FILE = input()
print ('Enter the second file name: ', end = '')
SECOND_FILE = input()
if SECOND_FILE == line in FIRST_FILE:
print('Yes')
else:
print('No')
infile = open('one.txt', 'w')
infile.write('Hello')
infile.close()
infile2 = open('SameAsone.txt', 'w')
infile2.write('Hello')
infile2.close()
infile3 = open('DifferentFromone.txt', 'w')
infile3.write('Bye')
infile3.close()
Спасибо.
Содержимое строки. Извините, что не разъяснил.
SECOND_FILE и FIRST_FILE это строка, почему вы пишете line in SECOND_FILE? И каковы намерения следующих трех блоков для записи файла?
Это я просто пробую. я точно не знаю как это сделать
Этот вопрос может быть дубликатом stackoverflow.com/questions/21747112/…






Вы можете добиться этого более эффективно, используя метод Прилавок модуля коллекций, а OrderedDict сохраняет порядок строк.
from collections import Counter, OrderedDict
with open("one.txt") as file_one, open("two.txt") as file_two:
if OrderedDict(Counter(file_one)) == OrderedDict(Counter(file_two)):
print("matched")
else:
print("not macthed")
Обратите внимание, что это просто покажет, содержат ли оба файла одинаковые строки, но не обязательно в идентичном порядке.
@jamesdlin Я думал, что он просто хочет сравнить два файла.
Считаете ли вы, что один файл, содержащий foo\nbar\n, совпадает с другим файлом, содержащим bar\nfoo\n?
@jamesdlin понял. спасибо, я обновил ответ, надеюсь, это поможет
Простой подход состоит в том, чтобы прочитать оба файла, используя f.read(), где f — это файл, открываемый в режиме чтения ('r'). Операция read() возвращает строковое содержимое файлов.
Затем мы сравниваем прочитанное содержимое файлов, используя ==, чтобы определить, идентичны ли последовательности строк.
Пусть fileA, fileB будут существующими именами файлов. Следовательно, минимальный код сравнения файлов должен быть:
f = open(fileA, 'r')
contentA = f.read()
f.close()
f = open(fileB, 'r')
contentB = f.read()
f.close()
result = "No"
if contentA == contentB:
result = "Yes"
Вы также должны обрабатывать случаи, когда один из файлов отсутствует (минимальный код возвращает трассировку, если любой из fileA, fileB ссылается на несуществующий файл.
Простым подходом было бы использование filecmp
import filecmp
check = filecmp.cmp('file1.txt', 'file1.txt')
print ('No', 'Yes')[check]
Если вам нужна дополнительная информация, см. документы
Мне нравится этот ответ! Спасибо, что напомнили мне о filecmp, также вы могли бы сделать: print ('No', 'Yes')[check] вместо if: else:, просто чтобы поставить его там
Отредактировано! Спасибо за понимание @Jab
Спасибо, это помогло. Теперь, как мне напечатать строки в обоих файлах под «Нет»?
@ skaul05 Нет проблем, я должен любить логическое индексирование
@Nanor взгляните на difflib в конкретном Differ.compare. Также это может быть отдельным вопросом после некоторых исследований.
Похоже, это не работает, если файл file1.txt изменяется во время выполнения.
Вы можете использовать .read, также я предлагаю использовать оператор with, так как нет необходимости закрывать файлы вручную.
def compare_files(fn1, fn2):
with open(fn1, 'r') as file1, open(fn2, 'r') as file2:
return file1.read() == file2.read()
first_file = input('Enter the first file name: ')
second_file = input('Enter the second file name: ')
print(['No', 'Yes'][compare_files(first_file, second_file)])
Вы сравниваете строковое содержимое файлов (текст за текстом), «ID» файлов или байтовое содержимое файлов?