2015-12-21 35 views
0

我的代碼編譯並返回輸出中的數據。我要求打印數字的總和,並且程序不會打印它。我的總結聲明有問題嗎?我應該分開打印報表嗎?在Python中提取XML數據:打印數據,但總和未返回

這是我採寫:

import urllib 
import xml.etree.ElementTree as ET 

serviceurl = 'http://python-data.dr-chuck.net/comments_42.xml' 
while True: 
    url = serviceurl + urllib.urlencode({'sensor':'false', 'address': 'address'}) 
    print ('Retrieving', url) 
    uh = urllib.urlopen(url) 
    data = uh.read() 
    print ('Retrieved',len(data),'characters') 
    print (data) 
    tree = ET.fromstring(data) 
    results = tree.findall('.//count') 
print (results, sum(results)) 

這顯示了XML數據的樣子:

<comment> 
    <name>Matthias</name> 
    <count>97</count> 
</comment> 
+0

你不能總結字符串(傳遞數字總和,而不是字符串)。順便說一句,你不會說當你運行程序時會發生什麼情況,這對你的問題的讀者來說並不是那麼有幫助 - 這會產生很大的變化! –

+0

什麼版本? 您使用Python 3中的print和Python 2中的urllib.urlencode。 –

+0

我安裝了兩個Pythons。當程序運行時,它會編譯並返回URL中的數據和文件中的字符數。沒有其他印刷品。 – cybernerd

回答

0

您需要解析count標記中的數字並將其轉換爲int對象才能進行求和。

如果有多個計數,您可以將它們拉入列表中,然後遍歷列表以獲得總和。

例如:

totcomm = 0 # set initial sum value to zero 
counts = tree.findall('comments/comment') # create list of comments 
for item in counts:      # iterate through list 
    x = item.find('count').text    # pass count content to x 
    totcomm = tot + int(x)     # add integer of x to total 
print totcomm 

我還調整計劃,讓你不重複回去的URL(雖然真),但就是一個電話,所有的數據傳遞給你的'數據'變量。在這種情況下,您只需要:

url = 'http://python-data.dr-chuck.net/comments_42.xml' 
print 'Retrieving', url 

等等。

0

試着這麼做:

print(results, sum([float(x) for x in results])) 

你必須將string轉換成類似的值或float

+0

謝謝大家的輸入。他們對我理解我的錯誤非常有幫助。 – cybernerd

0

我真的很感謝這個網站,你的建議是壓倒性的 - 感謝所有的#你!這裏是我對這個問題的建議 - 手...

import urllib 
import xml.etree.ElementTree as ET 

url = raw_input('Enter location: ') 
if len(url) == 0: 
    url = 'http://python-data.dr-chuck.net/comments_189090.xml'  
uh = urllib.urlopen(url) 
data = uh.read() 
tree = ET.fromstring(data) 
count = 0 
totalcounts = 0       # set initial sum value to zero 
counts = tree.findall('comments/comment') # create list of comments 
for item in counts:      # iterate through list 
    x = item.find('count').text    # pass count content to x 
    totalcounts = totalcounts + int(x)  # add integer of x to total 
    count = count + 1 
print count 
print totalcounts