• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

秋天中的一片叶

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

【Python】取出两个文件中相同的电话号码及地址(文件类型为:txt文本)

一,准备好要处理的2个文件

1. 文件1内容: Person_info1.txt

学员编号	学生姓名	学生年龄	手机号码	E-mail地址	家庭住址
101	张三	18	13599713364	www.zhangsan@qq.com	江苏省苏州市工业园区津梁街
102	李四	20	15923796671	www.lisi.163.com	北京市朝阳区西北路石井街22幢
103	赵五	17	18655301183	www.zhaofive.yahoo.com	山东省烟台市芝罘区北大街55号
104	tony	30	15877563321	www.tonyliu.ibm.com	江苏省苏州市姑苏区山塘街177号
105	马云	47	15977560013	www.mayun.alibaba.com	浙江省杭州市西湖路110号1888
106	Jack	20	13677569901	www.jack123@qq.com	广东省深圳市南山区西丽1592幢12
107	tom	19	18622349971	www.tom456@qq.com	山东省青岛市人民路1234幢

2. 文件1内容: Person_info2.txt 

学员编号	学生姓名	学生年龄	手机号码	E-mail地址	家庭住址
101	liupeng	18	13598717364	www.liupeng@qq.com	江苏省苏州市工业园区津梁街
102	小明	20	15923456767	www.xiaoming.163.com	北京市朝阳区西北路石井街22幢
103	小李	17	18655301183	www.xiaoli.yahoo.com	山东省烟台市芝罘区北大街56号
104	tony	30	15872356331	www.tonyliu.ibm.com	江苏省苏州市姑苏区山塘街188号
105	马云	47	15977560013	www.mayun.alibaba.com	浙江省杭州市西湖路110号1888
106	Jack	20	13677569812	www.jack123@qq.com	广东省深圳市南山区西丽1435幢
107	bob	19	18622284971	www.bob456@qq.com	山东省青岛市人民路1257幢

 二,编写代码:

思路:

(1)通过正则表达式提取文本中的内容

(2)电话号码为11位数字,第一位肯定是1,第二位必定包含在35678这几个数字中,固定好前2位之后的9位只要匹配到全部是数字即可

(3)匹配住址因为全部是字符串,所以需要找2个文件中地址的共通性,出了北京市是已市开头外其他的都是..省来起始的所以可以把 ...省...市作为一个共通点来匹配

        另外再建立一个起始 ...市开始的字段匹配到北京市就可以了。接下来把第一个匹配跟第二个匹配合并就是我们想要的结果

代码呈现

 1 # -*- coding:utf-8
 2 import os  #导入OS模块便于对系统本身的命令调用(文件操作)
 3 import re  #导入re模块用于正则表达式
 4 
 5 #获取手机号码  (创建获取手机号码方法)
 6 def get_moblie(path):
 7     pattern = re.compile(R"[1][35678]\d{9}") #正则表达式获取文本中的手机号码
 8     if not os.path.isfile(path):
 9         return Exception #如果不是文件就抛出异常
10     else:
11         try:
12             with open(path,"r") as fd: # "r"为只读模式。 with关键字打开文件(with关键字的使用可以规避close方法自动关闭)。fd为赋值变量
13                 file_data = fd.read() #读取文件中所有内容
14         except Exception as e:
15             raise e
16         mobile_list = pattern.findall(file_data) #定义一个list接收获取到的手机号码
17         return mobile_list
18 
19 # 获取家庭住址
20 def get_homeaddress(path):
21     part01 = re.compile(r".\w省市*\w*") #为什么要创建2个part上面描述中已经解释参照上述描述
22     part02 = re.compile(r".\w市区*\w*")
23     if not os.path.isfile(path):
24         return Exception #如果不是文件就抛出异常
25     else:
26         try:
27             with open(path,"r") as fd:
28                 file_data = fd.read()
29         except Exception as e:
30             raise e
31         home_address = part01.findall(file_data) #定义一个list接收获取到的家庭住址(包含省份的)
32         home_address02 = part02.findall(file_data)#获取到北京市起始的家庭住址
33         home_address.append(home_address02[1]) #两个list内容合并home_address02[1]代表只提取北京市起始的字符串
34         return home_address
35 
36 if __name__ == "__main__":
37     path01 = R"C:\Users\Administrator\Demo02\Person_info01.txt"
38     path02 = R"C:\Users\Administrator\Demo02\Person_info02.txt"
39 
40     #案例1: 遍历path01中的手机号码是否在path02中存在.
41     file_mobile01 = []
42     file_mobile02 = []
43     try:
44         file_mobile01 = get_moblie(path01)
45         file_mobile02 = get_moblie(path02)
46     except Exception as e:
47         print("获取到的手机号码出现异常")
48     set01 = set() # 去除重复的手机号码
49     for mobile in file_mobile01:
50         if mobile in file_mobile02:
51             set01.add(mobile)
52 
53     print("<<两个文件中相同的手机号码为>>:",end="\t")
54     for i in set01:
55         print(i,end=" ")
56     print()
57 print("========================================================================")
58 homeaddress01 = get_homeaddress(path01)
59 homeaddress02 = get_homeaddress(path02)
60 
61 #通过set集合的交集来得出相同的住址信息
62 setintersection = set(homeaddress01) & set(homeaddress02)
63 #set(homeaddress01).intersection(set(homeaddress02)) #方法同上
64 #print("<<两个文件中相同的家庭住址为>>:",setintersection)
65 
66 print("<<两个文件中相同的家庭住址为>>:")
67 for i in setintersection:
68     print(i)

三,结果呈现

<<两个文件中相同的手机号码为>>:    15977560013 18655301183 
========================================================================
<<两个文件中相同的家庭住址为>>:
浙江省杭州市西湖路110号1888
北京市朝阳区西北路石井街22幢
江苏省苏州市工业园区津梁街

 

posted on 2020-02-13 10:09  秋天中的一片叶  阅读(884)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3