Попытка найти, существует ли элемент в одном файле в другом файле

#python #file #text #compare #file-comparison

#python #файл #текст #Сравнить #сравнение файлов

Вопрос:

Я все еще новичок в python, поэтому я постараюсь изо всех сил объяснить, что я сделал, поэтому в основном мой код запрашивает у пользователя ввод, затем он импортирует текстовый файл, содержащий слова, и каждое слово находится в отдельной строке, затем мой код сохраняет ввод пользователя в отдельный файл и использует только первую строку из пользовательского ввода я пытаюсь увидеть, существуют ли слова, которые мой пользовательский ввод, в предварительно заданном текстовом файле, который я импортировал, а затем в моем полном коде я бы выполнил некоторые операции с этими словами, но это не работает. я пробовал использовать «==» и использовать «счетчик» и «если x в y ….» а также, если пользовательский ввод действительно существует в текстовом файле, счетчик в последней строке выводит ноль.

 user_input=input("Enter: ")
user_input=user_input.upper()
user_input=user_input.split()
print(user_input)
list_words=[]
with open("words.txt","r") as words:
    english_words=words.readlines()
    for line in english_words:
       line=line.upper()
       list_words.append(line.rstrip('n'))
with open("user-message.txt","w ") as file_of_user_inp:
       for word in user_input:
           file_of_user_inp.write(word  "n")
           
with open("user-message.txt","r") as file_of_user_inp:
       first_line_user_inp=file_of_user_inp.readline()
       user_input=first_line_user_inp

for each_eng_word in list_words:
    for each_word in user_input:
        if each_word==each_eng_word:
            print("it worked")

print(list_words.count((user_input)))
 

Комментарии:

1. Неясно, что вы получаете против того, что вы ожидаете.

2. Сохранение пользовательского ввода в файл кажется ненужным шагом. Это обязательно?

3. Вы не удаляете новую строку при чтении пользовательского ввода.

4. Пара предложений по ускорению вашего кода. 1) сделайте перерыв, когда вы найдете совпадение (если первое совпадение совпадает, вы все равно сравниваете остальные n-1 элементы. 2) вы могли бы упростить, используя list.index() для поиска или if word in list: Вы также можете создавать их set() и выполнять операции набора. Кроме того, я не уверен, хотите ли вы перебирать большой набор слов во внешнем цикле, хотите ли вы убедиться, что каждое слово в вашем ‘words.txt «это на входе или наоборот?

5. first_line_user_inp=file_of_user_inp.readline() Результирующая строка будет иметь n в конце. Удалите его, как вы сделали с файлом word с помощью rstrip('n')

Ответ №1:

Вот программа, которую я создал, которая может помочь. Вы можете ввести список слов, разделенных пробелами, и он проверит текстовый документ на наличие совпадений. Если он найдет совпадение, он напечатает соответствующие слова.

Первое, что я сделал, это создал переменные user_input, list1, которые содержат все слова из вашего текстового документа, numbers, wordString, которая является временной строкой, которая содержит ваши слова до их добавления в список.

 user_input = input("Enter: ")
list1 = []
numbers = "1234567890"
WordString = ""
 

Здесь я открываю текстовый документ и использую функцию read() для чтения текстового документа.

 with open("YOUR TEXT DOCUMENT", "r") as b:
    words = b.read()
 

Здесь я перебираю каждый символ внутри вашего текстового документа, используя «цикл for», «range ()» и «len ()».

Первое «если условно» проверяет, не является ли x-я буква в текстовом документе пробелом, и проверяет, не является ли x-я буква числом (или нет в нашей «числовой переменной», которая в любом случае содержит строку чисел). Это позволяет считать все последовательные буквы словами. Мы добавляем эти буквы по порядку в строку «wordString».

Второе «если условно» проверяет, закончилось ли слово или нет. Он делает это, проверяя, достигли ли вы пробела, числа или конца текстового документа. Если он выполнил любое из этих условий, он добавит ваше готовое слово в массив list1. Значение «-1» связано с тем, что len() измеряет символы, начинающиеся с единицы, а элементы внутри массивов начинают отсчет с 0. Как только мы находим полное слово, мы сбрасываем wordString обратно в пустую строку, чтобы она была готова снова пройти цикл.

 for x in range(len(words)):
    if words[x] != " " and words[x] not in numbers:
        WordString  = words[x]
    if words[x] == " " or words[x] in numbers or x == len(words) - 1:
        list1.append(WordString)
        WordString = ""
 

Этот второй цикл также проверяет наличие слов, но вместо этого он ищет слова, которые вы ввели в переменную «user_input». Он также повторно использует предыдущую переменную «wordString».

Единственное отличие заключается во втором операторе if. Как только мы найдем законченное, законченное слово. Мы проверяем, находится ли это слово внутри массива list1 (место, куда мы помещаем все слова из текстового документа.). Если, если это слово внутри массива list1, мы его печатаем.

 for y in range(len(user_input)):
    if user_input[y] != " " and user_input[y] not in numbers:
        WordString  = user_input[y]
    if user_input[y] == " " or user_input[y] in numbers or y == len(user_input) - 1:
        if WordString in list1:
            print(WordString)
        WordString = ""
 

Я постарался объяснить это как можно лучше, я тоже новичок в Python. Возможно, есть более эффективный способ, и я уверен, что другие ветераны смогут объяснить это лучше. Но вот мой вклад (без каламбура).