You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量读取CSV调用whois查域名信息时循环无法正常结束

问题原因
  • 存在无意义的死循环:你在外层套了while cont无限循环,当CSV文件的所有行都被遍历完成后,内层的for row in CSVfileReader不会再执行任何操作,程序会空转这个while循环,没有异常触发就永远不会走到cont = False的逻辑,因此卡在第一个文件处理完的位置。
  • 异常捕获范围不合理:当前try块包裹了整个循环逻辑,只有当whois查询、文件读写出现报错时才会进入except分支,文件正常读取完成不会触发任何异常,自然不会打印"done with csv"。
  • 额外隐患:路径拼接直接用字符串相加容易出错,且whois.creation_date可能返回单个datetime对象而非列表,直接遍历会触发报错;输出文件未使用上下文管理器管理,容易出现资源泄漏。
修正后代码
import whois
import csv 
import os
import time

location = "directory"
new = 'filename_new'

for filename in os.listdir(location):
    if not filename.endswith(".csv"):
        continue
    # 正确拼接路径,避免拼写错误
    input_path = os.path.join(location, filename)
    output_path = os.path.join(location, f"{new}{filename}")
    count = 1
    
    with open(input_path, "r", encoding="utf-8") as in_f, open(output_path, "a", encoding="utf-8", newline="") as out_f:
        reader = csv.reader(in_f, delimiter=",")
        writer = csv.writer(out_f)
        
        for row in reader:
            key = row[0].rstrip()
            if not key:
                continue
            try:
                # 拉取域名whois信息
                domain_info = whois.whois(key)
                create_date = domain_info.creation_date
                # 统一转为列表处理,兼容单值、多值两种返回格式
                if not isinstance(create_date, list):
                    create_date = [create_date]
                for dt in create_date:
                    print(dt)
                    writer.writerow([count, key, dt])
                    print(f"count: {count}")
                    count += 1
                    time.sleep(0.9)
            except Exception as e:
                # 单个域名查询失败仅打印提示,不中断整个处理流程
                print(f"域名{key}查询失败,错误信息:{str(e)}")
                continue
    # 单个文件处理完成提示
    print(f"done with csv: {filename}")

print("The End")
改动说明
  • 删除冗余的while cont死循环逻辑,CSV行遍历完成后自动进入下一个文件处理流程
  • 缩小异常捕获范围到单个域名的whois查询环节,单个域名查询失败不会中断整个任务,同时文件正常处理完成后会自动打印完成提示
  • 用os.path.join拼接路径,避免路径拼写错误
  • 兼容creation_date单值和多值两种返回格式,避免遍历报错
  • 输入输出文件都用with上下文管理器管理,不需要手动调用close方法,避免资源泄漏
  • 新增空行过滤逻辑,避免CSV内空行导致报错

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 02:36:07