2013-09-26 149 views
2

我遇到的問題是按列出的順序,姓名和考試分數將名稱分開。如何在python中將字符串拆分爲多個部分?

我確實在我的代碼如下:print repr(names)在循環中得到以下6行數據

'1 Name 559/1 ' 
'2 Name 484/1 ' 
'3 Name N'ame 444/2 ' 
'4 Name 400/1 ' 
'5 Name Name 928/5 ' 
'6 Name Name-Name 1292/10 ' 

我希望能夠給他們分手了,但我得到一個錯誤說AttributeError: 'str' object has no attribute 'lsplit'

我有一個去使用lsplit,rsplit和分裂,但我不能得到它的工作...

在最終結果的名字將變成3個變量:names_indexnamenames_score

任何人都知道我該如何實現這個目標?

謝謝 - HYFLEX

編輯

for item in listitems: 
    if item.find("strong"): 
     names = str(item.text) 
     names = items .split("\n") 
     for name in names: 
      clean_name = name.lstrip(" ") 
      print repr(clean_name) 
      student_number = clean_name.lsplit(" ", 1) 
      student_score = clean_name.rsplit(" ", 1) 
      #student_name = clean_name.lsplit(" ", 1) # Unsure how to get the last part.. 

回答

6

沒有str.lsplit因爲str.split已經從左邊去。

對於每個字符串,只需撥打.split(),你會得到一個清單,[names_index, name, names_score]

如果圖案number/words/more numbers,那麼你可以使用正則表達式:

>>> import re 
>>> filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '1 Name 559/1 ')) 
['1', 'Name', '559/1 '] 
>>> filter(None, re.split(r'(\d+) (\w.*) (\d.*)', '6 Name Name-Name 1292/10 ')) 
['6', 'Name Name-Name', '1292/10 '] 
+0

但問題是,有時我的名字在他們的名稱和/或以他們的名義符號空間。 – Ryflex

+0

@Hyflex名稱中有數字嗎? – TerryA

+0

不,我不認爲我的學生會在他們的名字中有數字,編輯來展示我的例子我嘗試過的。 – Ryflex

3

rsplit返回分裂的結果,而不是隻有最後一部分。所以你實際上正朝着正確的方向前進。

爲您的代碼,你可能有空間,在你的名字,你可以這樣做:

the_string = the_string.strip() 
[id, name_score] = the_string.split(' ',1) # Split into ['1', 'name name 654/1'] 
[name, score] = name_score.rsplit(' ',1) # Split into ['name name','654/1'] 

因此,輸入`6名名稱名1292年至1210' 年你的期望值已經在那裏了:

id # this is '6' 
name # this is 'Name Name-name' 
score # this is '1292/10' 
+0

我很確定這不是問題 – TerryA

+1

對不起,改變了。 – justhalf

+0

編輯我的帖子,以顯示我正在努力實現的一個例子... – Ryflex

3

它一樣簡單 -

>>> s = '4 Name 400/1 ' 
>>> names_index, name, names_score = s.split() 
>>> names_index, name, names_score 
('4', 'Name', '400/1') 
>>> 

正如Haidro說,沒有功能lsplit,使用分裂插件TEAD。

+0

編輯我的帖子,以顯示我想要實現的例子... – Ryflex

+1

@Hyflex看起來不錯,upvoted! – theharshest

3

您可以與您的清單這樣操作

>>> names = ['1 Name 559/1 ', 
'2 Name 484/1 ', 
'3 Name Naaame 444/2 ', 
'4 Name 400/1 ', 
'5 Name Name 928/5 ', 
'6 Name Name-Name 1292/10 '] 
>>> names_lst=[] 
>>> for n in names: 
    names_lst+=n.split() 

>>> names_lst 
['1', 'Name', '559/1', '2', 'Name', '484/1', '3', 'Name', 'Naaame', 
'444/2', '4', 'Name', '400/1', '5', 'Name', 'Name', '928/5', '6', 'Name', 
'Name-Name', '1292/10', ['1', 'Name', '559/1'], ['2', 'Name', '484/1'], 
['3', 'Name', 'Naaame', '444/2'], ['4', 'Name', '400/1'], 
['5', 'Name', 'Name', '928/5'], ['6', 'Name', 'Name-Name', '1292/10']] 
+0

存在的問題是名稱應該組合在一起而不是分開。編輯來展示我的例子,我嘗試過。 – Ryflex

相關問題