【问题标题】:Python string comparison not evaluating as expectedPython字符串比较未按预期评估
【发布时间】:2017-06-27 20:32:53
【问题描述】:

我在一个文件中有一个日期,在另一个文件中有一个日期。它们看起来像这样:

log1.log -> “06/11/2017”

log2.log -> “06/11/2017”

专门找这样的匹配,我写了这么一点:

if row != date:
  pass
elif row == date:
  print("match found")

而且我已经尝试过制定逻辑,而不是检查不等式,而是检查是否相等;但它没有用。我还将找到的值导出到一个新的文本文件中,并检查了在终端中很难检测到的空格或换行符。没有骰子。

将日期打印到终端确认它们确实匹配。

示例输出:

[#] 06/13/2017 06/13/2017

当我打印它们时,它们之间有一个空格,并使用哈希表示法来保持打印输出看起来井井有条。

我尝试的最后一件事是在比较中表面地将它们都转换为字符串。我疯了吗?这是怎么回事?

除了数据本身,我可以提供任何东西。但是,我们实际上只是在讨论 .log 文件,其中包含我使用 split 抓取的行,因此我提供上面的输出以排除任何数据问题。

编辑:当你编辑我的帖子时,你绝对扼杀了我的语法和可读性,伙计。当你完成它时,就英语而言,它是胡言乱语。让我们先不管它,k?这句话的主语是“逻辑”。我编辑回来的内容很好。而且您不需要否认“空白”的复数形式。它已经暗示它可能有多个实例。

【问题讨论】:

  • 每个日志文件中是否只有一行?您是按行号还是一行与整个文件进行比较?
  • 它们可能是字符串中的不可见字符。尝试将它们转换为字节并比较结果。
  • 每个日志的倍数和 log2 中的每隔一行都是空白的。我将粘贴代码。 pastebin.com/xP0pibEc
  • 尝试用 print([ord(x) for x in row], [ord(x) for x in date]) 替换 print(" [#] "+str(row)+' '+str(date)) - 这将打印两个字符串中字符的实际 ASCII 代码。
  • 好吧,这样就解决了 - date 来自一个只是 ASCII 的文件(48 代表 0,54 代表 6 等),但 row 不是乙>。它可能是 UCS2/UTF-16 编码,您应该在 opening 该文件时声明该编码。

标签: python string comparison evaluation


【解决方案1】:

open文件时使用encoding='UTF-16LE'参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2015-03-26
    相关资源
    最近更新 更多