我的理解是,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(