python - 字符串比较似乎不适用于从文件中读取的行

标签 python

我有一个名为 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.

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

我错过了什么?

最佳答案

Why doesn't "We have a match!" get printed? What did I miss?

如果您注意到控制台上的输出,您会得到 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 你认为是 'Line 3' 实际上是 'Line 3\n') 因此你的 if 条件失败

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

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

关于python - 字符串比较似乎不适用于从文件中读取的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761498/

相关文章:

Python:按投影值的相等性将列表分组为子列表

python - Matplotlib 在半学图中禁用指数表示法

python - 有没有办法可以为列表中的同一个团队加分?

Python BeautifulSoup 网络爬虫 : Appending piece of data to list

python - 推特(Tweepy): What counts as a search API call?

python - 使用elasticsearch-dsl-py在子字段(包含在另一个字段中的字段)上创建查询?

python - Django导入错误: cannot import name 'render_to_response' from 'django.shortcuts'

python - Pandas 读取 excel 值而不是公式

python - 从 Pandas Dataframe 中每个 Id 的第一个时间戳中减去最后一个时间戳

python - 使用 pynsist 捆绑应用程序和依赖项