Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)
生活随笔
收集整理的這篇文章主要介紹了
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個文件中地址的共通性,出了北京市是已市開頭外其他的都是…省來起始的所以可以把 …省…市作為一個共通點來匹配
另外再建立一個起始 …市開始的字段匹配到北京市就可以了。接下來把第一個匹配跟第二個匹配合并就是我們想要的結果
代碼呈現
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import os #導入OS模塊便于對系統本身的命令調用(文件操作) import re #導入re模塊用于正則表達式#獲取手機號碼 (創建獲取手機號碼方法) def get_moblie(path):pattern = re.compile(R"[1][35678]\d{9}") #正則表達式獲取文本中的手機號碼if not os.path.isfile(path):return Exception #如果不是文件就拋出異常else:try:with open(path,"r") as fd: # "r"為只讀模式。 with關鍵字打開文件(with關鍵字的使用可以規避close方法自動關閉)。fd為賦值變量file_data = fd.read() #讀取文件中所有內容except Exception as e:raise emobile_list = pattern.findall(file_data) #定義一個list接收獲取到的手機號碼return mobile_list# 獲取家庭住址 def get_homeaddress(path):part01 = re.compile(r".\w省市*\w*") #為什么要創建2個part上面描述中已經解釋參照上述描述part02 = re.compile(r".\w市區*\w*")if not os.path.isfile(path):return Exception #如果不是文件就拋出異常else:try:with open(path,"r") as fd:file_data = fd.read()except Exception as e:raise ehome_address = part01.findall(file_data) #定義一個list接收獲取到的家庭住址(包含省份的)home_address02 = part02.findall(file_data)#獲取到北京市起始的家庭住址home_address.append(home_address02[1]) #兩個list內容合并home_address02[1]代表只提取北京市起始的字符串return home_addressif __name__ == "__main__":path01 = R"C:\Users\Administrator\Demo02\Person_info01.txt"path02 = R"C:\Users\Administrator\Demo02\Person_info02.txt"#案例1: 遍歷path01中的手機號碼是否在path02中存在.file_mobile01 = []file_mobile02 = []try:file_mobile01 = get_moblie(path01)file_mobile02 = get_moblie(path02)except Exception as e:print("獲取到的手機號碼出現異常")set01 = set() # 去除重復的手機號碼for mobile in file_mobile01:if mobile in file_mobile02:set01.add(mobile)print("<<兩個文件中相同的手機號碼為>>:",end="\t")for i in set01:print(i,end=" ")print() print("========================================================================") homeaddress01 = get_homeaddress(path01) homeaddress02 = get_homeaddress(path02)#通過set集合的交集來得出相同的住址信息 setintersection = set(homeaddress01) & set(homeaddress02) #set(homeaddress01).intersection(set(homeaddress02)) #方法同上 #print("<<兩個文件中相同的家庭住址為>>:",setintersection)print("<<兩個文件中相同的家庭住址為>>:") for i in setintersection:print(i)總結
以上是生活随笔為你收集整理的Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3-join()和split
- 下一篇: Python3 动态导入模块的两种方式