【发布时间】:2014-08-25 05:39:44
【问题描述】:
我环顾了一会儿,没有找到任何与我正在做的事情相匹配的东西。
我有这个代码:
import csv
import datetime
legdistrict = []
reader = csv.DictReader(open('active.txt', 'rb'), delimiter='\t')
for row in reader:
if '27' in row['LegislativeDistrict']:
legdistrict.append(row)
ages = []
for i,value in enumerate(legdistrict):
dates = datetime.datetime.now() - datetime.datetime.strptime(value['Birthdate'], '%m/%d/%Y')
ages.append(int(datetime.timedelta.total_seconds(dates) / 31556952))
total_values = len(ages)
total = sum(ages) / total_values
print total_values
print sum(ages)
print total
搜索一个制表符分隔的文本文件并在名为LegislativeDistrict 的列中查找包含字符串27 的行。 (因此,查找第 27 个 LD 中的所有行。)它运行良好,但如果字符串是单个数字,我会遇到问题。
当我使用27 运行代码时,我得到以下结果:
0 ;) eric@crunchbang ~/sbdmn/May 2014 $ python data.py
74741
3613841
48
这意味着有 74,741 个值包含 27,总年龄为 3,613,841,平均年龄为 48。
但是当我使用4 运行代码时,我得到了这个结果:
0 ;) eric@crunchbang ~/sbdmn/May 2014 $ python data.py
1177818
58234407
49
第一个结果 (1,177,818) much 太大了。我所在的州没有超过 170,000 人的 LD,而且我的名单只涉及选民。
因此,我假设使用 4 会找到 所有 包含 4 的值...所以 14、41 和 24将全部使用,从而导致数量巨大。
有没有一种方法可以搜索特定列中的值并使用正则表达式或精确搜索?正则表达式有效,但我不能让它只搜索一列 - 它搜索整个文本文件。
我的数据如下所示:
StateVoterID CountyVoterID Title FName MName LName NameSuffix Birthdate Gender RegStNum RegStFrac RegStName RegStType RegUnitType RegStPreDirection RegStPostDirection RegUnitNum RegCity RegState RegZipCode CountyCode PrecinctCode PrecinctPart LegislativeDistrict CongressionalDistrict Mail1 Mail2 Mail3 Mail4 MailCity MailZip MailState MailCountry Registrationdate AbsenteeType LastVoted StatusCode
IDNUMBER OTHERIDNUMBER NAME MI 01/01/1900 M 123 FIRST ST W CITY STATE ZIP MM 123 4 AGE 5 01/01/1950 N 01/01/2000 B
【问题讨论】:
-
'4' in 400(例如)将返回True,因为in会进行子字符串检查-您不使用==来检查字符串是否相等的任何特殊原因? -
喜欢
if row === 4? @JonClements -
if row['LegislativeDistrict'] == '4'...'4' in '400'是True,'4' == '400'是False -
您可能还希望注意那里的整数除法...您可能希望确保某些值是显式浮点数。在您的解释器中尝试
3/2和float(3)/2的结果(或只是3.0/2- 看起来您刚刚在那里获得了ints,所以您将失去精度 -
我要去睡觉了...见math.ceil :)