47

在学习 python 时,我遇到了这段代码,它接受一个文本文件,将每一行拆分为一个数组,并将其插入到自定义字典中,其中 array[0] 是键,array[1] 是值:

my_dict = {}

infile = open("file.txt")
for line in infile:
    #line = line.strip() 
    #parts = [p.strip() for p in line.split("\t")]
    parts = [p for p in line.split("\t")]
    my_dict[parts[0]] = parts[1]
    print line

for key in my_dict:
    print "key: " + key + "\t" + "value " + my_dict[key]

我在注释行时断时续地运行程序,得到了相同的结果。(当然用它下面的行替换第二个注释行)。在我看来,做一个 strip() 是可选的。把它留在里面是更好的做法吗?

4

5 回答 5

64

如果您可以注释掉代码并且您的程序仍然有效,那么是的,该代码是可选的。

.strip()没有参数(或None作为第一个参数)删除开头和结尾的所有空格,包括空格、制表符、换行符和回车符。保留它不会造成任何伤害,并允许您的程序处理插入到文件中的意外额外空白。

例如,通过使用.strip(),文件中的以下两行将导致相同的最终结果:

 foo\tbar \n
foo\tbar\n

我会说把它留在里面。

于 2012-10-22T14:40:31.477 回答
14

在这种情况下,您可能会遇到一些差异。考虑如下一行:

"foo\tbar "

在这种情况下,如果你strip,那么你会得到{"foo":"bar"}作为字典条目。如果你不剥离,你会得到{"foo":"bar "}(注意最后的额外空间)

请注意,如果您使用line.split()而不是line.split('\t'),您将在每个空白字符上进行拆分,并且“ striping”将在拆分过程中自动完成。换句话说:

line.strip().split()

总是等同于:

line.split()

但:

line.strip().split(delimiter)

不一定等同于:

line.split(delimiter)
于 2012-10-22T14:40:44.207 回答
9

strip什么都不做,只是删除字符串中的空格。如果要删除字符串前后多余的空白,可以使用条带。

可以说明这一点的示例字符串是:

In [2]: x = "something \t like     \t this"
In [4]: x.split('\t')
Out[4]: ['something ', ' like     ', ' this']

看,即使在拆分后\t,第一个和第二个项目中也有额外的空格,可以在代码中使用 strip 删除。

于 2012-10-22T14:43:05.730 回答
1

不,最好将它们排除在外。

没有 strip(),你可以有空的键和值:

apples<tab>round, fruity things
oranges<tab>round, fruity things
bananas<tab>

如果没有 strip(),bananas 会出现在字典中,但值是空字符串。使用 strip(),此代码将抛出异常,因为它剥离了香蕉线的制表符。

于 2012-10-22T14:41:17.893 回答
0

strip从字符串的开头和结尾删除空格。如果您想要空格,请不要调用 strip。

于 2012-10-22T14:40:46.030 回答