2016-10-09 39 views
2

我有一个文本文件,看起来像这样:我在读它是这样删除在一个字符串的第一个字符离开空白

6 Hello World 

with open("test.txt") as fp: 
    for line in fp: 
     l = line.split(" ") 
     print(l) 

它打印我整个字符串:

6 Hello World 

我想删除了“6”字,只是存储字符串的“Hello World”在另一个字符串:

我做这个

newStr = l.replace(l[0],"") 

现在给我:

Hello World 

现在我想删除前导空间,存储字符串。 我尝试这样做:

newStr2 = newStr.replace(newStr[0],"") 
print(newStr2) 

但这打印:

HelloWorld 

而不是Hello World(没有前导空格字符) 什么我错在这里做什么? 另外,在newStr2上使用len()告诉我的长度是11,即使它是10. len()是否包含换行符?

回答

1

这是因为newStr.replace(newStr[0],"")newStr.replace(" ","")相同,它用一个空字符串替换单个空间的每个实例。

你想要的是lstrip它将删除字符串中的所有主要空格。

更何况,要更简洁,你可以简单地切掉从字符串开头的字符,然后lstrip

newStr = l[1:].lstrip() 

在另一方面,新行字符是一个长度的字符和在len适当地考虑:

>>> len('\n') 
1 

Pro-Tipline.split()的效果相同,效率也高于line.split(" ")。见Why is str.strip() so much faster than str.strip(' ')?


从本质上讲,你的代码就变成了:

with open("test.txt") as fp: 
    for line in fp: 
     l = line.split() 
     print(l[1:].lstrip()) 
1

的选择,如果你想跳过完全替换(假设所有的数据都遵循这种模式)就是采取一切从.strip()返回的列表的第二个元素开始,使用join和切片,如:

l = " ".join(line.split(" ")[1:]) 
相关问题