当前位置: 首页 > 面试题库 >

Python'=='错误地返回false

卫焕
2023-03-14
问题内容

我试图逐行获取两个文件之间的差异,Python总是返回false。即使我比较相同的文件,Python(几乎)总是返回false。高飞的例子,但它在Python3.4.3上复制了我的问题。

file1.txt (example)
1
2
3

file1 = r"pathtofile\file1.txt"
file2 = r"pathtofile\file1.txt"
f1 = open(file1, "r")
f2 = open(file2, "r")

for line1 in f1:
    found = False
    for line2 in f2:
        if repr(line1) == repr(line2):
            found = True
            print("true")
    if found == False:
        print("false")

Python正确地识别出第一行是相同的,但是之后的所有内容都是错误的。有人可以复制吗?有任何想法吗?


问题答案:

第一次迭代结束后,您已经用尽了迭代器f2,需要file.seek(0)返回到文件的开头。

for line1 in f1:
    found = False
    for line2 in f2:
        if repr(line1) == repr(line2):
            print("true")
    f2.seek(0) # reset pointer to start of file

你只检查的第一线f1对的线f2,第一循环之后没有什么可迭代。

根据要发生的情况,您需要break在找到匹配的行时进行选择,或者found = False在内部循环中进行重置。

如果要所有匹配的行,则只需将输出存储在列表中,或者如果文件不是很大,则可以使用集合来查找公用行。

with open("f1") as f1, open("f2") as f2:   
    st = set(f1)
    common = st.intersection(f2)

如果要使用差异 st.difference(f2),则两者中的任何一条都不同时使用
st.symmetric_difference(f2)。这完全取决于您实际想要做什么。

您可能还需要检出filecmp和difflib



 类似资料:
  • 基类控制器里有error方法,用于api的错误消息返回输出 /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息,若要指定错误码,可以传数组,格式为['code'=>您的错误码,'msg'=>'您的错误消息'] * @param mixed $data 返回的数据 * @par

  • 我目前正在编码一个二叉查找树,目前正在尝试实现一个递归函数来确定二叉树中是否存在一个节点。 这是节点类: 所讨论的函数是Exists函数。这是在BST的根节点上调用的,就像这样:

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?

  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第

  • JSoup-1.8.1 尝试{ Document Document=Jsoup.connect(url.get(); 返回Document.getElementsByTag(“title”).text(); }catch(异常e){ System.out.println(e); 返回null; } org.jsoup.HttpStatusExc0019: HTTP错误获取URL。状态=404, U

  • 问题内容: 在Windows 2003上按计划任务运行的Java应用程序崩溃了,没有日志或任何有助于查明情况的信息。唯一可用的信息是该应用程序返回了代码143(8F)。该错误代码是从计划的任务日志中检索到的。 有谁知道该错误代码(143)代表什么?用户注销是否有可能导致应用程序终止? 谢谢, 问题答案: JVM错误代码143表示内部字段必须有效。这是在OTN讨论论坛上讨论的。但是,结论似乎是扼杀您