我环顾了一会儿,并没有发现任何与我正在做的事情相符的事情。
我有这段代码:
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)太多太大了。在我的州有超过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
答案 0 :(得分:1)
'4' in '400'
将返回True
,就像substring check一样。请改用'4' == '400'
,如果两个字符串相同,则只返回True
:
if '4' == row['LegislativeDistrict']:
(...)