通过不同csv文件循环的正则表达式匹配计数

2024-06-28 11:06:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个目录中有多个csv文件。我打开每个csvfile并用regex模式搜索匹配项,然后最后必须获得每个文件的所有匹配项的计数

data_pattern = "^(?!b(d)1+b)(?!123456789|219099999|078051120)(?!666|000|9d{2})\d{3}(?!00)\d{2}(?!0{4})\d{4}$"
p = re.compile(ssn_data_pattern)
ALL_CSVFILES =  glob.glob('/data/csvdata/*.csv')
for csvfile in ALL_CSVFILES:
 lines = [line.strip() for line in open(csvfile)]
 for line in lines:
   match=re.findall(ssn_data_pattern,line)
   head,tail=os.path.split(csvfile)
   tailstring=tail
   filename=tailstring.replace(".csv", "")
   print(filename,len(match))

输出如下:

第一行是字段名,它表示0,其余所有匹配项都计算为1。 相反,我需要一次对所有行进行计数

/data/csvdata/STG_201__DATA.csv
STG_201__DATA 0
STG_201__DATA 1
STG_201__DATA 1
STG_201__DATA 1
STG_201__DATA 1
/data/csvdata/CISADM2_BT7_DATA.csv
CISADM2_BT7_DATA 0
CISADM2_BT7_DATA 1
CISADM2_BT7_DATA 1
CISADM2_BT7_DATA 1
CISADM2_BT7_DATA 1
CISADM2_BT7_DATA 1
/data/csvdata/CISADM_DXP_ENRO_DATA.csv
CISADM_DXP_ENRO_DATA 0
CISADM_DXP_ENRO_DATA 1
CISADM_DXP_ENRO_DATA 1
CISADM_DXP_ENRO_DATA 1
CISADM_DXP_ENRO_DATA 1
CISADM_DXP_ENRO_DATA 1

Tags: csvcsvfileinfordatalinepatternstg