2014-12-18 2 views
-2

Я создаю среду интерактивных классов для своих друзей и я. До сих пор я мог использовать свой сценарий, загружать свои оценки, & фильтровать, какая информация важна. Мой сценарий выглядит следующим образом.Анализ громоздкой информации

import requests 
from bs4 import BeautifulSoup 

# Connect to D2L 
s = requests.Session() 
payload = { 
    'd2l_referrer': '', 
    'target': '/d2l/lp/ouHome/loginHome.d2l?isMobile=1', 
    'loginPath': '/d2l/m/login', 
    'userName': 'USERNAME', 
    'password': 'PASSWORD' 
} 
r = s.post('http://learn.ou.edu/d2l/lp/auth/login/login.d2l', data=payload) 
status = r.status_code 
if status == 200: 
    print "Connection Successful" 
else: 
    print "Unable to connect" 

# Grade Collection 
print "  Getting CLASS grades..." 
page = s.get("GRADEBOOK URL") 
soup = BeautifulSoup(page.content) 
grade = BeautifulSoup(str(soup.find_all('label'))) 
for strings in grade.stripped_strings: 
    if "/" in strings: 
     print strings 
print "Complete" 

Скрипт возвращает:

Connection Successful 
    Getting CLASS grades... 
50/50 
40/50 
40/50 
45/50 
50/50 
Complete 

На данный момент, я хочу, чтобы программа всего числа по обе стороны от «/» и разделить итоги, таким образом, давая «средний». Ex. ((50+40+40+45+50)/(50+50+50+50+50)) = 0.9 или (90%).

+1

Ваше название читается как спам-адрес электронной почты. –

+1

Итак, каков ваш вопрос? Что вы пытались извлечь цифры до сих пор? –

ответ

2

Вам нужно будет извлечь информацию о классе; Вы не указали, что означают числа, поэтому я предполагаю, что они называются passed и total:

passed = totals = 0 

for strings in grade.stripped_strings: 
    if "/" in strings: 
     print strings 
     pass_, total = map(float, strings.split('/')) 
     passed += pass_ 
     totals += total 

print "The average is: {:.1%}".format(passed/totals) 

Демо:

>>> lines = '''\ 
... 50/50 
... 40/50 
... 40/50 
... 45/50 
... 50/50 
... ''' 
>>> for strings in lines.splitlines(): 
...  if "/" in strings: 
...   print strings 
...   pass_, total = map(float, strings.split('/')) 
...   passed += pass_ 
...   totals += total 
... 
50/50 
40/50 
40/50 
45/50 
50/50 
>>> print "The average is: {:.1%}".format(passed/totals) 
The average is: 90.0% 

.1% инструкция Формат форматирует число с плавающей точкой в ​​процентах с 1 десятичной точкой (умножение на 100 и добавление символа %).

+0

Отлично работает, спасибо. –

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