2016-10-09 41 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:]) 
相關問題