我有一个看起来像这样的文本文件:
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()包括换行符吗?
答案 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