删除String中的第一个字符会留下空白

时间:2016-10-09 15:31:33

标签: python

我有一个看起来像这样的文本文件:

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()包括换行符吗?

2 个答案:

答案 0 :(得分:1)

那是因为newStr.replace(newStr[0],"")newStr.replace(" ","")相同,后者用空字符串替换单个空格的每个实例。

你想要的是lstrip,它会从你的字符串中删除所有前导空格。

更重要的是,为了减少冗长,你可以简单地切掉字符串中的主角,然后lstrip

newStr = l[1:].lstrip()

另一方面,新行字符是长度为1的字符,并在len中正确说明:

>>> len('\n')
1

专业提示line.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 :(得分:1)

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

join