剥离未移除的标签



我的理解是,strip():在删除任何前导和尾随空格(包括制表符(\t((后返回一个新字符串。

我有几行的源文本。一行以一个似乎是引导";B";字符

豆滴温度332

为什么下面的Python 3代码不将其识别为以";豆"?

count = 0
for line in fhand:
# strip beginning and ending whitespace from lines
line.strip()
if line.startswith('Bean') :
count = count + 1
print("There were", count, "lines in the file with Bean as the first word")

如果我将一行更改为包含几个空格,那么它就起作用了。

if line.startswith('  Bean') :

似乎致癌物得到了它。如果我将行修改为:

line = line.strip()

这就解决了。Doh!

一句重要的口头禅。字符串是不可变的。字符串是不可变的。字符串是不可变的。任何函数都不会更改字符串的值。它将创建一个新字符串。

如果你做了这样的事情:

x = "abc"
y = x
x += "d"

y的值仍将是"abc"。Python创建一个新字符串分配给x,而y仍然有旧字符串。

看来你已经想通了!但对于那些需要更多背景的人来说:

正如弗兰克所说,字符串是不可变的,这意味着它们一旦创建就不能更改。.strip()方法返回一个新字符串。它不会更改原始字符串。因此,如果我们再看一下代码:

count = 0
for line in fhand:
# strip beginning and ending whitespace from lines
line.strip()
if line.startswith('Bean') :
count = count + 1

我们可以看到,代码的问题在于,您没有存储由line.split()创建的新字符串,因此之后的if语句仍在使用旧字符串(带有空格的字符串(
这就是当您将line.startswith("Bean")更改为line.startswith(" Bean")时,它突然起作用的原因。

修复方法是将新的剥离字符串分配给旧的字符串变量,本质上用新字符串替换旧字符串:

line = line.strip()

关于.strip()方法的更多信息:Python Documentation-str.strip((
关于字符串的更多一般信息:Python文档-文本序列类型(str(

最新更新