You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python 3中为何仅提取Excel表格首个单元格?程序需求说明

问题分析与解决方案

从你提供的代码片段来看,核心问题是没有遍历Excel工作表中的所有URL单元格——目前的代码仅获取了工作表对象,但缺少对所有行/单元格的循环处理,自然只会默认处理第一个单元格的数据。下面结合你的需求(从WHOIS数据提取邮箱)给出完整修复方案:


方案1:基于xlrd遍历工作表

补全遍历逻辑,同时完善WHOIS邮箱提取的异常处理:

import whois
import xlrd
import tkinter
from tkinter import filedialog

# 选择Excel文件,隐藏多余的tk窗口
root = tkinter.Tk()
root.withdraw()
filename = filedialog.askopenfilename(
    initialdir="/",
    title="Select file",
    filetypes=(("xls files", "*.xls"), ("all files", "*.*"))
)

# 读取目标工作表
workbook = xlrd.open_workbook(filename)
sheet = workbook.sheet_by_index(0)

# 遍历所有行(假设第0行是表头,从第1行开始取URL;无表头则从0开始)
for row_idx in range(1, sheet.nrows):
    # 获取当前行第一列的URL(根据你的Excel结构调整列索引)
    site_url = sheet.cell_value(row_idx, 0)
    print(f"正在处理URL: {site_url}")
    
    try:
        # 获取WHOIS数据
        whois_data = whois.whois(site_url)
        # 提取邮箱(whois返回的emails可能是列表或单个字符串)
        emails = whois_data.emails
        if emails:
            output_emails = ', '.join(emails) if isinstance(emails, list) else emails
            print(f"提取到邮箱: {output_emails}")
        else:
            print(f"未找到邮箱: {site_url}")
    except Exception as e:
        print(f"处理{site_url}出错: {str(e)}")

方案2:基于pandas(更简洁易读)

你已经导入了pandas,用它读取Excel会更高效,代码逻辑更清晰:

import whois
import pandas as pd
import tkinter
from tkinter import filedialog

# 选择文件
root = tkinter.Tk()
root.withdraw()
filename = filedialog.askopenfilename(
    initialdir="/",
    title="Select file",
    filetypes=(("xls files", "*.xls"), ("all files", "*.*"))
)

# 读取Excel,若URL列有表头则用df["URL"],无表头则用row[0]
df = pd.read_excel(filename)

# 遍历每行的URL
for index, row in df.iterrows():
    site_url = row[0]  # 根据你的Excel结构调整列索引或列名
    print(f"正在处理URL: {site_url}")
    
    try:
        whois_data = whois.whois(site_url)
        emails = whois_data.emails
        if emails:
            output_emails = ', '.join(emails) if isinstance(emails, list) else emails
            print(f"提取到邮箱: {output_emails}")
        else:
            print(f"未找到邮箱: {site_url}")
    except Exception as e:
        print(f"处理{site_url}失败: {str(e)}")

关键注意事项

  • 调整列索引:根据你的Excel中URL所在的列,修改代码中的列索引(比如URL在第二列就把0改成1)。
  • 异常处理:WHOIS查询可能因网络问题、域名不存在等报错,try-except块能避免程序直接崩溃。
  • 窗口优化:用root.withdraw()隐藏tk的空白主窗口,提升交互体验。

内容的提问来源于stack exchange,提问作者Mike Kordvani

火山引擎 最新活动