2016-08-24 93 views
0

我已經編寫了一個腳本,該腳本從德克薩斯州執行的違規者處獲取html表(不能發佈鏈接,因爲限制,但可以在getcsv.py的代碼中找到)並轉換它變成一個csv文件。然後另一個腳本統計每個人的比賽。然而,我一直都有一個問題,除了白人和西班牙裔之外的所有人,然後單獨計算。這:[('White', 237), ('Black', 196), ('Hispanic', 100), ('Other', 2), ('White ', 1), ('Hispanic ', 1)]是結果。Python在csv文件中統計重複項爲唯一身份

這是一個下載csv文件(getcsv.py)

import csv 
from bs4 import BeautifulSoup 
from urllib.request import urlopen 

soup = BeautifulSoup(urlopen('http://www.tdcj.state.tx.us/death_row/dr_executed_offenders.html'), "html.parser") 
table = soup.find('table') 
headers = [header.text for header in table.find_all('th')] 
rows = [] 
for row in table.find_all('tr'): 
    rows.append([val.text for val in row.find_all('td')]) 

with open('new.csv', 'w', encoding="utf8", newline='') as f: 
writer = csv.writer(f) 
writer.writerow(headers) 
writer.writerows(row for row in rows if row) 

這是發生在比賽的腳本(analyse.py)

import csv 
import collections 


race = collections.Counter() 



with open('new.csv') as input_file: 
    next(input_file) 
    for row in csv.reader(input_file, delimiter=','): 
     race[row[8]] += 1 

list(race) 
racecom = race.most_common() 


print ('Number of white people executed: %s' % grades['White']) 
print ('Number of black people executed: %s' % grades['Black']) 
print ('Number of Hispanic people executed: %s' % grades['Hispanic']) 
print ('Number of Other people executed: %s' % grades['Other']) 
print (racecom) 

然而,當我使用的腳本由convertcsv.org生成的csv文件問題消失,所以我相當確定它是getcsv.py有問題。

生成的文件可以在https://www.dropbox.com/s/gz0kob2miejqucq/actual.csv?dl=0下載爲actual.csv,自動下載的文件可以在https://www.dropbox.com/s/chkycm21konvcw0/new.csv?dl=0下載爲new.csv。

在此先感謝。

+3

「拉美裔」和「西班牙裔」這兩個鍵是不同的。在添加到「計數器」時,您應該使用'.strip()'空白區域。 –

+0

@ M.Klugerford謝謝!我不太明白下面的答案(感謝我自己的愚蠢),並且你的評論解釋了它。 – GeekPro101

回答

2

空白空間很重要。如果鑰匙應該是相同的,你必須將它們剝離:

with open('new.csv') as input_file: 
    next(input_file) 
    race = collections.Counter(row[8].strip() 
     for row in csv.reader(input_file, delimiter=',')) 
+0

感謝您的回答,我接受了它,現在它工作。 – GeekPro101

相關問題