2012-02-03 3 views
0

Я проанализировал html-документ в python, и я сохраняю содержимое тега body в списке. Ниже приведен код:доступ к анализируемым данным html в python с использованием списков

import urllib, re 
text = urllib.urlopen("http://fiji4.ccs.neu.edu/~zerg/lemurcgi/lemur.cgi?d=0&g=p&v=algorithm&v=javed").read() 
data = re.compile(r'.*?<BODY>(.*?)<HR>', re.DOTALL).match(text).group(1) 
print data 

выход следующее:

 6   3 
    12603  235   1 
    37210  363   3 
    64618  348   2 
     4   4 
    80073  560   1 
    80560  504   1 
    80875  807   1 
    80917  636   1 

Я хочу, чтобы хранить каждую новую строку в новом списке. Нужна помощь в этом. Я новичок в python. Спасибо, ghbhatt.

ответ

2
#!/bin/python 

data = """6   3 
    12603  235   1 
    37210  363   3 
    64618  348   2 
     4   4 
    80073  560   1 
    80560  504   1 
    80875  807   1 
    80917  636   1""" 

lists = [line.split() for line in data.split("\n")] 

print lists 

Edit:data.splitlines(), вероятно, более компактен, чем data.split("\n").

2
l = [] 
for line in data.splitlines(): 
    l.append(line.split()) 

или

l = [line.split() for line in data.splitlines()] 

l Сейчас:

[['6', '3'], 
['12603', '235', '1'], 
['37210', '363', '3'], 
['64618', '348', '2'], 
['4', '4'], 
['80073', '560', '1'], 
['80560', '504', '1'], 
['80875', '807', '1'], 
['80917', '636', '1']] 

Это хранит данные в виде списка списков строк. Если вы знаете, что есть только целые числа, вы можете сделать:

l = [] 
for line in data.splitlines(): 
    l.append([int(a) for a in line.split()]) 

или

l = [] 
for line in data.splitlines(): 
    l.append(map(int, line.split())) 

или

l = [map(int, line.split()) for line in data.splitlines()] 

, который создает:

[[6, 3], 
[12603, 235, 1], 
[37210, 363, 3], 
[64618, 348, 2], 
[4, 4], 
[80073, 560, 1], 
[80560, 504, 1], 
[80875, 807, 1], 
[80917, 636, 1]] 
1

Используйте split метод для разделения строка в строки и t хань в частности столбцов:

import urllib, re 
text = urllib.urlopen("http://fiji4.ccs.neu.edu/~zerg/lemurcgi/lemur.cgi?d=0&g=p&v=algorithm&v=javed").read() 
data = re.compile(r'.*?<BODY>(.*?)<HR>', re.DOTALL).match(text).group(1) 

list_data = [] 
data_lines = data.split("\n") # Split the string to list of lines 
for line in data_lines: 
    row = line.split() # Split the line to numbers 
    list_data.append(row) 

for row in list_data: 
    print row 
3

Не следует использовать регулярное выражение для разбора HTML: RegEx match open tags except XHTML self-contained tags

Вместо этого, существует целый ряд больших парсеров в Python:

http://www.crummy.com/software/BeautifulSoup/

http://lxml.de/

Используйте один из них и, в общем, получение списка содержимого будет просто частью того, что библиотека делает.

0

Я не уверен в том, что вы хотите:

[re.findall(r'\d+', line) for line in data.split('\n')] 
Смежные вопросы