【问题标题】:String comparison doesn't seem to work for lines read from a file字符串比较似乎不适用于从文件中读取的行
【发布时间】:2014-02-13 17:38:01
【问题描述】:

我有一个名为 test.txt 的文件,其中包含以下内容:

Line 1
Line 2
Line 3
Line 4

我有这样的简单 Python 程序:

f = open("test.txt")

myline = "Line 3"
for line in f:
    print myline + " - " + line
    if myline == line:
        print "We have a match!"

if myline == "Line 3":
    print "This works."

我得到了这个结果:

Line 3 - Line 1

Line 3 - Line 2

Line 3 - Line 3

Line 3 - Line 4

This works.

为什么没有“我们有比赛!”打印出来?

我错过了什么?

【问题讨论】:

    标签: python


    【解决方案1】:

    为什么没有“我们有比赛!”打印?我错过了什么?

    如果您会注意到控制台上的输出,您将得到 double \n(换行符)一个,因为 print 第二个是因为在文件中每一行的末尾都有 \n。您的文件如下所示:

    Line 1
    Line 2
    Line 3
    Line 4
    

    基本上是:Line 1\nLine 2\nLine 3\nLine 4(假设您没有任何额外的空格,例如制表符、空格)。

    在 for 循环中:for line in f:line 的结束字符是 \n(而您认为是 'Line 3'line 实际上是 'Line 3\n')因此您的 if 条件 失败。

    要删除 \n,只需使用 str.strip([chars]); 函数。 strip() 方法返回字符串的副本,其中所有字符都已从字符串的开头和结尾剥离(默认空白字符)。

    因此,将if myline == line: 替换为if myline == line.strip() 这就是@C.B. 的答案。

    【讨论】:

    • 已知换行符在相同情况下显示为\r\n
    • @FallenAngel 是的,我认为基本上取决于操作系统。我在 Linux 上有经验,它总是\n(如果我是正确的)我解释了这个答案,因为很多时候当我是新手时,我都会遇到这个错误。
    【解决方案2】:

    Strip换行符:

    for line in f:
        print myline + " - " + line
        if myline == line.strip():
            print "We have a match!"
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2012-11-25
      相关资源
      最近更新 更多