【问题标题】:Trying to find if an element in one file exists in another file试图查找一个文件中的元素是否存在于另一个文件中
【发布时间】:2020-12-10 14:46:44
【问题描述】:

我还是 python 新手,所以我会尽力解释我做了什么 所以基本上我的代码要求用户输入 然后它导入一个包含单词的文本文件,每个单词都在单独的行中, 然后我的代码将用户输入存储在一个单独的文件中,并且只使用用户输入的第一行 我正在尝试查看我的用户输入的单词是否存在于我导入的预设文本文件中,然后在我的完整代码中我会对这些单词进行一些操作,但它不起作用我尝试使用“==”并使用“ counter" 和 "if x in 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)找到匹配项时中断(如果第一个匹配项,您仍然比较剩余的n-1 元素。2)您可以使用list.index() 进行搜索或if word in list: 进行简化您也可以将它们设为set() 和做集合操作。另外,我不确定您是否要遍历外部循环中的大量单词您要确保“words.txt”中的每个单词都在输入中还是相反?跨度>
  • first_line_user_inp=file_of_user_inp.readline() 生成的字符串末尾将有\n。像使用 rstrip('\n') 处理 word 文件一样删除它

标签: python file text compare file-comparison


【解决方案1】:

这是我制作的一个程序,可能会有所帮助。您可以键入以空格分隔的单词列表,它将检查文本文档是否有任何匹配项。如果找到匹配项,它将打印匹配的单词。

我做的第一件事是创建变量 user_input、list1 保存文本文档中的所有单词、数字、WordString,它是一个临时字符串,用于在将单词添加到列表之前保存它们。

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

这里我打开一个文本文档,使用 read() 函数读取文本文档。

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

在这里,我使用“for 循环”、“range()”和“len()”遍历文本文档中的每个字符。

第一个“if 条件”检查文本文档中的第 x 个字母是否不是空格,并检查第 x 个字母是否不是数字(或者不在我们的“数字变量”中,它无论如何都包含一串数字。)这允许所有连续的字母都算作单词。我们将这些字母添加到“WordString”字符串中。

第二个“if conditional”检查单词是否已经结束。 它通过检查您是否已到达空格或数字或文本文档的末尾来执行此操作。如果它满足这些条件中的任何一个,它会将您完成的单词添加到 list1 数组中。 “-1”是因为 len() 测量从 1 开始的字符,并且数组中的项目从 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 的初学者。可能有更有效的方法,我相信其他退伍军人可以更好地解释它。但这是我的意见(不是双关语)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2011-02-12
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多