【问题标题】:Removing first character in a String leaves whitespace删除字符串中的第一个字符会留下空格
【发布时间】:2016-10-09 15:31:33
【问题描述】:

我有一个如下所示的文本文件:

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

【问题讨论】:

    标签: python


    【解决方案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())
    

    【讨论】:

      【解决方案2】:

      另一种方法,如果您想完全跳过替换(并假设您的所有数据都遵循此模式),只需使用 .strip() on 返回的列表的第二个元素中的所有内容,使用 join和切片,如:

      l = " ".join(line.split(" ")[1:])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-23
        • 2011-06-24
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 2016-04-26
        • 2023-02-23
        • 2011-05-29
        相关资源
        最近更新 更多