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

如何用Pandas读取含多IP的CSV并实现反向DNS查询?

解决CSV多IP列的反向DNS查询问题

你的问题核心有两个:一是CSV读取参数设置错误,二是未拆分多IP字段。以下是具体解决方案:

关键问题修正

  1. quotechar参数错误:你把quotechar设为了逗号,这完全不对——CSV里quotechar是用来包裹包含分隔符的字段的字符(通常是双引号),改成quotechar='"'才能正确识别带逗号的多IP单元格。
  2. 未拆分多IP字段:多IP单元格是一串用逗号分隔的IP字符串,必须拆分成单个IP才能让反向查询函数正常工作。

修改后的完整代码

# 安装依赖
# pip install pandas dnspython xlrd xlsxwriter

### 导入库 ###
import pandas as pd
import time 
from pandas.io.excel import ExcelWriter
from dns import resolver, reversename

### 计时 ###
startTime = time.time()

# 读取CSV:修正quotechar,保留去引号/括号的转换器
custom_delimiter = ','
logs = pd.read_csv(
    'C:\\Users\\user\\Desktop\\rdnslookup\\input_file\\logs.csv',
    sep=custom_delimiter,
    quotechar='"',  # 改成双引号,正确识别带逗号的字段
    engine='python',
    converters={'ip': lambda x: x.strip('[""]')},  # 去掉首尾的引号和方括号
    on_bad_lines="skip"
)

# 拆分多IP为单独行:把每个IP列表展开成独立行
# 先把ip列按逗号分割成列表,再用explode拆分
logs['ip'] = logs['ip'].str.split(',')
logs_exploded = logs.explode('ip').reset_index(drop=True)
# 去除IP前后的空格(如果有的话)
logs_exploded['ip'] = logs_exploded['ip'].str.strip()

# 去重IP,避免重复查询
logs_filtered = logs_exploded.drop_duplicates(['ip']).copy()

### 反向DNS查询函数 ###
def reverseDns(ip):
    # 简单的IP格式校验(可选,避免无效IP查询报错)
    if not ip or '.' not in ip:
        return 'N/A'
    try:
        return str(resolver.query(reversename.from_address(ip), 'PTR')[0])
    except Exception:
        return 'N/A'

# 执行查询
logs_filtered['dns'] = logs_filtered['ip'].apply(reverseDns)

# 合并查询结果到拆分后的全量数据
final_logs = logs_exploded.merge(logs_filtered[['ip', 'dns']], how='left', on='ip')

### 输出到Excel ###
writer = ExcelWriter(
    'C:\\Users\\user\\Desktop\\rdnslookup\\output_file\\validated_logs.xlsx',
    engine='xlsxwriter'
)
final_logs.to_excel(writer, 'Sheet1', index=False)
writer.close()

# 打印耗时
print(f"处理完成,耗时: {time.time() - startTime:.2f} 秒")

代码说明

  • CSV读取修正:quotechar='"'让pandas正确识别被双引号包裹的多IP字段,不会把字段内的逗号当成列分隔符。
  • 多IP拆分:str.split(',')把每个单元格的IP字符串拆成列表,explode()把列表展开成单独行,确保每行只有一个IP。
  • IP清洗:str.strip()去除IP前后可能存在的空格,避免查询失败。
  • 可选校验:在reverseDns里加了简单的IP格式判断,跳过无效的空值或非IP字符串。

内容的提问来源于stack exchange,提问作者Sulphuric-16

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:53:15