Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中从单独的文本文件打印不匹配的单词_Python_Python 2.7 - Fatal编程技术网

如何在python中从单独的文本文件打印不匹配的单词

如何在python中从单独的文本文件打印不匹配的单词,python,python-2.7,Python,Python 2.7,对于我的项目,我想学习如何从两个单独的文本文件中打印不匹配的词,并将不匹配的词打印到单独的第三个文本文件中。目前,我有两个单独的文本文件,如下所示 ----------文件1------ ----------文件2------- 这两个文件都有单独的行上打印的字符。我想知道如何匹配这两个文件,并在单独的行中打印不匹配的单词。例如,在第1行,单词A*在两个文本文件中都不匹配,因此它将被打印到单独的第三个文本文件中 我的尝试 f1 = open("QuestionsMaths.txt", "r")

对于我的项目,我想学习如何从两个单独的文本文件中打印不匹配的词,并将不匹配的词打印到单独的第三个文本文件中。目前,我有两个单独的文本文件,如下所示

----------文件1------

----------文件2-------

这两个文件都有单独的行上打印的字符。我想知道如何匹配这两个文件,并在单独的行中打印不匹配的单词。例如,在第1行,单词A*在两个文本文件中都不匹配,因此它将被打印到单独的第三个文本文件中

我的尝试

f1 = open("QuestionsMaths.txt", "r")
f2 = open("AnswersMaths.txt", "r")
f3 = open("Feedback.txt", "a")
list1 = f1.readlines()
list2 = f2.readlines()
f3.write("The incorrect answers are: \n")
for i in list1:
    for j in list2:
        if i==j:
            f3.write(i)
然而,这些代码所做的只是打印一句话,错误的答案是:


对于Python来说非常陌生,所以任何关于代码的教学细节都将非常感谢。希望我明白了。谢谢。

您的程序应该如下所示:

with open("QuestionsMaths.txt", "r") as f1:
    list1 = f1.readlines()
with open("AnswersMaths.txt", "r") as f2:
    list2 = f2.readlines()

with open("Feedback.txt", "a") as f3:
    f3.write("The incorrect answers are: \n")

    for questionLine, answerLine in zip(list1, list2):
        if answerLine.strip() not in questionLine:
            f3.write(answerLine)
说明
使用open(filename,…)作为f是使用文件的正确方法。如果您这样做,当出现异常或缩进块完成时,它将自动关闭。请注意,
f
仅在此块中可用

answerLine.strip()
将删除行尾和其他空白。我们需要这样做,因为在
questionLine
中,正确答案后面永远不会有行尾,但在
answerLine
中肯定会有

zip(list1,list2)
将为您提供成对的行,以便您将
list1
的第一行与
list2
的第一行相匹配,依此类推。在您的实现中,实际上是将
list1
中的所有行与
list2
中的所有行进行匹配

如果回答行不在问题行中
将检查
回答行
是否未出现在
问题行中
。如果您使用
answerLine==questionLine
您将检查字符串是否相同

最后是一句轻微的评论。如果您在第三个文件中输入的所有答案都是错误的,则无法将其与实际问题进行匹配。
因此,我建议再次像这样改进for循环:

for question, (questionLine, answerLine) in enumerate(zip(list1, list2), 1):
    if answerLine.strip() not in questionLine:
        # answerLine still ends with lineend, so no lineend in
        # the format string.
        f3.write('Q{}: {}'.format(question, answerLine))
enumerate(iterable,start=0)
将返回一个元组,该元组包含索引以及列表的相应元素(在本例中也是元组)。是的,python可以像这样解析嵌套元组。

“Feedback.txt”,使用改进的for循环和您的示例作为输入:

不正确的答案是:
问题1:A*
问题3:C*
问题5:E*
问题6:A*
问题7:D*
问题8:E*
问题10:E*

如果有两个长度相同的列表,则可以枚举一个列表并将其与另一个列表进行比较。使用map和enumerate,它是一个单行线。之后,您将有一个包含所有结果的列表:

list3=map(lambda(i,x):如果list1[i]else''中的x为x,则枚举(list2))
打印'\n'。加入(列表3)
只需将其保存到第三个文件中

我建议首先剥离两个列表中的项目,以避免匹配问题:

list1=map(lambda r:r.strip(),list1)
list2=map(lambda r:r.strip(),list2)

输出应该是什么样的?@VinilNarang输出应该与File2的显示方式相同,因此只需将每个不匹配的单词打印在单独的一行上。请给出上述情况下的输出示例?File3的输出应该是:如果单词a*不匹配,则在第1行显示“a*”,如果B*也不匹配,第2Okay行上的“B*”。我仍然不清楚输出格式。但也许你在这里做错了,你在比较两条完整的线。您真正应该做的是检查line2是否包含在line1中。您可以使用不同的字符串函数“issubstr”或“contains”来检查这一点。希望有帮助!哇,非常感谢,代码工作得非常完美,但最重要的是,您编写了所有函数的详细说明。你还写了一句我都没想到的话。非常感谢你,非常出色的工作。
with open("QuestionsMaths.txt", "r") as f1:
    list1 = f1.readlines()
with open("AnswersMaths.txt", "r") as f2:
    list2 = f2.readlines()

with open("Feedback.txt", "a") as f3:
    f3.write("The incorrect answers are: \n")

    for questionLine, answerLine in zip(list1, list2):
        if answerLine.strip() not in questionLine:
            f3.write(answerLine)
for question, (questionLine, answerLine) in enumerate(zip(list1, list2), 1):
    if answerLine.strip() not in questionLine:
        # answerLine still ends with lineend, so no lineend in
        # the format string.
        f3.write('Q{}: {}'.format(question, answerLine))