2013-06-21 51 views
3

我無法遍歷由pickle讀取的列表循環。此代碼的最終目標是循環遍歷每個項目並返回每個項目的ID號碼。遍歷由pickle讀取的列表以查找用戶標識

## Opening the file, and loading it into a list## 
with open('TEMP_ITEMS.txt', 'rb') as openfile: 
    items = pickle.load(openfile) 

我在通過這個嘗試循環,並找到ID號的嘗試基於一些舊的XML抓取技術,但由於某些原因的邏輯在這裏並不適用。

for item in enumerate(items): 

    pattern0 = re.compile('ID: (.*?) <br>') 
    idnumber = float(re.findall(pattern0, items[0])[0]) 
    print "ID Number: ",idnumber 

的TEMP_ITEMS.txt

(lp0 
S'\n    <item>\n     <title>Timmy</title>\n     <link>caturl</link>\n     <description><![CDATA[\n        Timmy <br>\n        ID: 3712 <br>\n        Age: 10 <br>\n        Weight: 7lbs <br>\n        Time: 17:23 <br>\n        Cat Name: Timmy <br>\n\n     ]]></description>\n     <guid isPermaLink="false">04e72b29-065d-4893-a4d2-f16ff30a283e</guid>\n     <pubDate>Fri, 21 Jun 2013 01:09:05 GMT</pubDate>\n    </item>' 
p1 
aS'\n    <item>\n     <title>George</title>\n     <link>caturl</link>\n     <description><![CDATA[\n        George <br>\n        ID: 4124 <br>\n        Age: 14 <br>\n        Weight: 8lbs <br>\n        Time: 15:41 <br>\n        Cat Name: George <br>\n\n     ]]></description>\n     <guid isPermaLink="false">212f9fbf-564b-470a-a64a-ef51036ff06a</guid>\n     <pubDate>Fri, 21 Jun 2013 01:28:20 GMT</pubDate>\n    </item>' 
p2 
a. 

在這個問題上的任何幫助或建議的內容實施例,將不勝感激。親切的問候AEA下falsetru建議使用

代碼,它返回一個錯誤

import pickle 
import re 

with open('TEMP_RSS_ITEMS.txt', 'rb') as temp_rss_items_open4: 
    items = pickle.load(temp_rss_items_open4)   
    print items 
    for item in enumerate(items): 
     pattern0 = re.compile('ID: (.*) <br>') 
     for idnumber in re.findall(pattern0, item): 
      print idnumber 

錯誤的代碼它生產:

Traceback (most recent call last): 
    File "C:/Sharing/test1.py", line 9, in <module> 
    for idnumber in re.findall(pattern0, item): 
    File "C:\Python27\lib\re.py", line 177, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: expected string or buffer 
>>> 
+0

'pattern0 = re.compile(...); re.findall(pattern0)'沒有'item'的商業? – iMom0

+0

Hello @ iMom0我仍然在學習編碼,如果某件事看起來非常明顯錯誤,那麼它可能就是。 – AEA

回答

6

嘗試使用的.*非貪婪版本:

pattern0 = re.complie(r'ID: (.*?) <br>') 

或'+`如果ID只有數字:

pattern0 = re.complie(r'ID: (\d+)') 

UPDATE

import pickle 
import re 

pattern0 = re.compile('ID: (.*) <br>') 
with open('TEMP_RSS_ITEMS.txt', 'rb') as f: 
    items = pickle.load(f)   
    for item in items: 
     for idnumber in pattern0.findall(item): 
      print idnumber 
+0

謝謝你的回答@falsetru,我已經設法通過改變enumerate(items)中的項目來解決這個代碼的第一個問題:'現在的問題是循環腳本只返回列表中的第一個項目,因爲我希望它返回第一個循環中第一個項目的id,然後是列表中第二個項目的id等等。任何想法? – AEA

+0

@AEA,我更新了代碼。 – falsetru

+0

嘿謝謝@falsetru,不幸的是它仍然返回一個錯誤,我輸入了使用的代碼,並在問題結束時返回錯誤。還有什麼想法? :S – AEA

4

嘗試[0]項目更換項目:

for item in enumerate(items): 
    pattern0 = re.compile('ID: (.*?) <br>') 
    idnumber = float(re.findall(pattern0, item)[0]) 

如果您遍歷每個項目,那麼爲什麼不使用每個項目?

+0

歡呼聲回答yeh我做了這個,它返回了這個錯誤:'TypeError:expected string or buffer' – AEA