用python代码完成以下程序:输入目录,遍历所有excel文件,判断phone,mobile和contact_email列中的内容是否为11位数字,如果是则输出为列表
时间: 2023-08-31 12:41:26 浏览: 195
### 回答1:
您好,以下是一个可以用来遍历目录下的 Excel 文件,并判断 phone,mobile 和 contact_email 列中是否都为 11 位数字的 Python 代码:
```
import os
import re
import pandas as pd
def check_columns(df):
# 判断 phone,mobile 和 contact_email 列中是否都为 11 位数字
phone_pattern = r'^\d{11}$'
mobile_pattern = r'^\d{11}$'
contact_email_pattern = r'^\d{11}$'
phone_match = df['phone'].apply(lambda x: bool(re.match(phone_pattern, str(x))))
mobile_match = df['mobile'].apply(lambda x: bool(re.match(mobile_pattern, str(x))))
contact_email_match = df['contact_email'].apply(lambda x: bool(re.match(contact_email_pattern, str(x))))
return all(phone_match) and all(mobile_match) and all(contact_email_match)
def main():
# 输入目录
directory = input("请输入目录:")
# 遍历目录下的 Excel 文件
result = []
for filename in os.listdir(directory):
if filename.endswith('.xlsx') or filename.endswith('.xls'):
filepath = os.path.join(directory, filename)
df = pd.read_excel(filepath)
if check_columns(df):
result.append(filepath)
# 输出结果
print(result)
if __name__ == '__main__':
main()
```
在这段代码中,我们使用了 os 和 pandas 库,分别用来遍历文件目录和读取 Excel 文件。我们还使用了 re 库来进行正则表达式匹配。
在 `main` 函数中,我们首先输入目录,然后使用 `os.listdir` 函数遍历目录下的文件,并使用 `pandas.read_excel` 函数读取 Excel 文件。接着,我们调用 `check_columns` 函数来判断 phone
### 回答2:
可以使用以下代码完成上述任务:
```python
import os
import pandas as pd
def check_phone(directory):
file_list = os.listdir(directory)
result = [] # 用于存储结果列表
for file_name in file_list:
if file_name.endswith('.xlsx') or file_name.endswith('.xls'):
file_path = os.path.join(directory, file_name)
df = pd.read_excel(file_path) # 读取Excel文件
for column_name in ['phone', 'mobile', 'contact_email']:
if column_name in df.columns: # 判断列名是否在Excel中存在
column_data = df[column_name].astype(str) # 将列中的数据转换为字符串型
for data in column_data:
if len(data) == 11 and data.isdigit(): # 判断是否为11位数字
result.append(data)
return result
# 示例用法:
directory_path = '目录路径'
output_list = check_phone(directory_path)
print(output_list)
```
以上代码中,首先定义了一个`check_phone`函数,该函数输入一个目录路径,并返回符合要求的电话号码列表。在函数内部,首先获取目录下所有文件的文件名列表,然后使用`pd.read_excel`读取每个Excel文件。接着,对于每个指定列名('phone'、'mobile'、'contact_email'),判断是否存在于Excel中的列名列表中。如果存在,则将该列数据转换为字符串类型,并遍历每个单元格内容。通过判断字符串长度是否为11位以及是否全为数字,来确定是否为11位数字。如果是,将其添加到结果列表中。最后,返回结果列表。
示例用法中,需要将`'目录路径'`替换为实际的目录路径。执行程序后,将输出符合要求的电话号码组成的列表。
### 回答3:
以下是使用Python代码完成上述程序的示例:
```python
import os
import pandas as pd
def check_excel_files(directory):
files = os.listdir(directory)
excel_files = [file for file in files if file.endswith('.xlsx') or file.endswith('.xls')]
result = []
for file in excel_files:
file_path = os.path.join(directory, file)
df = pd.read_excel(file_path)
phone_column = df['phone']
mobile_column = df['mobile']
contact_email_column = df['contact_email']
for idx, value in phone_column.items():
if isinstance(value, str) and value.isdigit() and len(value) == 11:
result.append(value)
for idx, value in mobile_column.items():
if isinstance(value, str) and value.isdigit() and len(value) == 11:
result.append(value)
for idx, value in contact_email_column.items():
if isinstance(value, str) and value.isdigit() and len(value) == 11:
result.append(value)
return result
directory = input("请输入目录路径:")
phone_numbers = check_excel_files(directory)
print("符合要求的电话号码列表:", phone_numbers)
```
上述代码首先读取指定目录下的所有文件,并筛选出Excel文件。然后逐个读取Excel文件中的phone、mobile和contact_email列的内容,判断其是否为11位数字,并将符合要求的电话号码加入到结果列表中。最后打印输出符合要求的电话号码列表。
阅读全文