从多Excel提取邮箱生成CSV失败:无输出且手动文件被删除
问题分析与解决方案
核心问题定位
脚本执行日志显示成功,但输出文件不存在,手动创建会被脚本删除后无后续写入,大概率是以下几种情况:
1. 未提取到任何邮箱地址
脚本逻辑是:
- 先删除已存在的输出文件
- 仅当从Excel中提取到邮箱时,才会追加写入CSV
如果所有目标Excel文件中都没有匹配到邮箱(比如数据格式变化、邮箱正则不匹配新格式),脚本删除原文件后不会创建新文件,最终就会出现“文件消失”的现象。
2. 输出路径无写入权限
C:\Users\HAL-2023\Desktop\Py_out文件夹可能存在权限限制,导致pandas无法写入文件,但未抛出明确错误。
3. 文件被杀毒软件拦截
部分杀毒软件会将自动生成的CSV文件判定为可疑文件,直接拦截删除,尤其脚本先删后写的操作可能触发检测。
分步排查与修复
第一步:确认是否提取到邮箱
修改脚本,添加日志查看提取情况:
# Loop through Excel files in the folder for filename in os.listdir(folder_path): if filename.endswith('.xlsx') or filename.endswith('.xls'): input_file_path = os.path.join(folder_path, filename) print(f"正在处理文件: {filename}") # 新增:确认是否遍历到目标文件 email_addresses = extract_emails_from_excel(input_file_path) print(f"从{filename}提取到{len(email_addresses)}个邮箱") # 新增:查看提取数量 # Append extracted email addresses to the CSV file if email_addresses: df = pd.DataFrame({'Email Addresses': email_addresses}) df.to_csv(output_csv_file, mode='a', index=False, header=False)
运行后查看输出:
- 如果显示“提取到0个邮箱”,说明正则或Excel数据有问题,需要调整正则表达式,或检查Excel中邮箱的存储格式(比如是否是纯文本)。
- 如果显示未处理任何文件,说明
folder_path下没有符合后缀的Excel文件,检查路径是否正确。
第二步:处理无数据时的空文件生成
如果确实没有提取到邮箱,希望保留空文件,在脚本最后添加:
print(f"Extracted email addresses written to {output_csv_file}") # 新增:如果文件不存在则创建空文件 if not os.path.exists(output_csv_file): open(output_csv_file, 'w').close() print("未提取到任何邮箱,已创建空CSV文件")
第三步:排查权限与杀毒软件问题
- 尝试以管理员身份运行Python脚本,看是否能生成文件。
- 临时关闭杀毒软件,或把
Py_out文件夹和脚本所在目录加入杀毒软件白名单。 - 修改输出路径为桌面根目录:
output_csv_file = r'C:\Users\HAL-2023\Desktop\output_emails.csv',测试是否能生成文件。
第四步:优化正则表达式(如果邮箱提取失败)
原正则可能无法匹配部分特殊格式的邮箱,比如带连字符的域名,或新顶级域名(如.dev、.app),可以替换为更兼容的正则:
email_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b'
内容的提问来源于stack exchange,提问作者Abhishek Anand
相关产品推荐
相关产品推荐

