Python中的String.strip()

Rhs*_*Rhs 43 python string strip

在学习python时,我遇到了这个代码,它接受一个文本文件,将每一行拆分成一个数组,并将其插入到一个自定义字典中,其中数组[0]是键,数组[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]
Run Code Online (Sandbox Code Playgroud)

我在关闭和打开注释行的情况下运行程序,得到了相同的结果.(当然用它下面的一行替换第二个注释行.)在我看来,做一个strip()是可选的.留下它是更好的做法吗?

Mar*_*ers 62

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

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

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

 foo\tbar \n
foo\tbar\n
Run Code Online (Sandbox Code Playgroud)

我会说留下来.

  • 这个特定输入是可选的,但一般来说,防止至少一些错误输入是一种好习惯.行尾的额外空格是如此常见(特别是当手动编辑文件时)我几乎总是使用.strip(). (2认同)

mgi*_*son 13

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

"foo\tbar "
Run Code Online (Sandbox Code Playgroud)

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

请注意,如果您使用line.split()而不是line.split('\t'),则会在每个空白字符上拆分,并且" striping"将在拆分过程中自动完成.换一种说法:

line.strip().split()
Run Code Online (Sandbox Code Playgroud)

总是相同:

line.split()
Run Code Online (Sandbox Code Playgroud)

但:

line.strip().split(delimiter)
Run Code Online (Sandbox Code Playgroud)

不一定相当于:

line.split(delimiter)
Run Code Online (Sandbox Code Playgroud)


Sen*_*ran 8

strip什么都不做,但删除字符串中的空格.如果要从字符串的前后移除额外的空白,可以使用strip.

示例字符串可以说明:

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

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