字符串比较似乎不适用于从文件中读取的行
Posted
技术标签:
【中文标题】字符串比较似乎不适用于从文件中读取的行【英文标题】: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.
为什么没有“我们有比赛!”打印出来?
我错过了什么?
【问题讨论】:
【参考方案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!"
【讨论】:
以上是关于字符串比较似乎不适用于从文件中读取的行的主要内容,如果未能解决你的问题,请参考以下文章
我的代码适用于输入文件,但不适用于其他文件。 (调试断言错误)