Python CSV行和列中的完全匹配

时间:2014-07-03 23:50:58

标签: python regex list search

我环顾了一会儿,并没有发现任何与我正在做的事情相符的事情。

我有这段代码:

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的值...所以144124都将被使用,从而导致数量巨大。

有没有办法可以搜索特定列中的值并使用正则表达式或精确搜索?正则表达式有效,但我不能只搜索一列 - 它会搜索整个文本文件。

我的数据如下:

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

1 个答案:

答案 0 :(得分:1)

'4' in '400'将返回True,就像substring check一样。请改用'4' == '400',如果两个字符串相同,则只返回True

if '4' == row['LegislativeDistrict']:
    (...)