2013-06-21 6 views
3

У меня возникли проблемы с переходом по списку, который читал маринованный. Конечная цель этого кода заключалась в том, чтобы перебирать каждый элемент и возвращать номер идентификатора каждого элемента.Цитирование по списку, которое читает pickle, чтобы найти userid

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

Моя попытка пытается перебрать это и найти идентификационные номера была основана на некоторых старых методах 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

Привет @ 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, мне удалось исправить первую проблему с этим кодом, перейдя на 'для элемента в перечислении (items):' проблема в том, что скрипт цикла только когда-либо возвращает первый элемент в списке, где, как я хочу, чтобы он возвращал идентификатор для первого элемента в первом цикле, затем идентификатор для второго элемента в списке и т. д. Любые идеи? – 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: ожидаемая строка или буфер' – AEA

Смежные вопросы