Python批量获取xlsx文件中的手机号,查询第一列中的手机号归属地并保存到同文件夹下新建的的xlsx文件中
时间: 2023-07-16 09:17:36 浏览: 168
实现这个功能需要用到三个库:`openpyxl`、`phonenumbers`和`os`。
首先,使用`os`库获取当前文件夹中所有的xlsx文件,然后遍历每个文件,对每个文件进行处理。处理的过程中,首先使用`openpyxl`库读取xlsx文件中的数据,然后使用正则表达式从数据中提取出手机号码。提取出手机号码后,使用`phonenumbers`库解析手机号码,并获取归属地信息。最后,将手机号码和归属地信息保存到一个新的xlsx文件中。
下面是代码实现:
```python
import os
import re
import openpyxl
import phonenumbers
from phonenumbers import geocoder
# 获取当前文件夹中所有的xlsx文件
files = [f for f in os.listdir() if f.endswith('.xlsx')]
# 遍历每个文件
for file in files:
# 读取xlsx文件
wb = openpyxl.load_workbook(file)
sheet = wb.active
# 遍历每一行
for row in sheet.iter_rows(min_row=2):
# 获取手机号码
phone_number = ''
for cell in row:
match = re.search(r'\d{11}', str(cell.value))
if match:
phone_number = match.group()
break
# 解析手机号码
if phone_number:
try:
parsed_number = phonenumbers.parse(phone_number, 'CN')
location = geocoder.description_for_number(parsed_number, 'zh')
except phonenumbers.NumberParseException:
location = '无法解析归属地'
else:
location = '无手机号码'
# 将手机号码和归属地信息保存到新的xlsx文件中
new_file = os.path.splitext(file)[0] + '_location.xlsx'
if not os.path.exists(new_file):
wb_new = openpyxl.Workbook()
sheet_new = wb_new.active
sheet_new.append(['手机号码', '归属地'])
else:
wb_new = openpyxl.load_workbook(new_file)
sheet_new = wb_new.active
sheet_new.append([phone_number, location])
wb_new.save(new_file)
```
代码中,首先使用`os.listdir()`函数获取当前文件夹中所有的xlsx文件,然后使用列表推导式过滤出所有以`.xlsx`结尾的文件。接着,使用`openpyxl.load_workbook()`函数读取xlsx文件。读取文件后,使用`iter_rows()`方法遍历每一行数据。对于每一行数据,使用正则表达式从单元格中提取手机号码。提取出手机号码后,使用`phonenumbers.parse()`函数解析手机号码,并使用`geocoder.description_for_number()`函数获取归属地信息。最后,将手机号码和归属地信息保存到新的xlsx文件中。
需要注意的是,代码中使用了`try-except`语句捕获了`phonenumbers.NumberParseException`异常。这是因为有些字符串可能不是合法的手机号码,解析时会抛出异常。如果出现这种情况,代码会将归属地信息设置为`无法解析归属地`。
阅读全文