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

如何使用Python3对CSV文件中的IP地址和端口号进行排序

错误原因
  • 报错的核心原因是csv.reader返回的每一行都是包含[IP地址,端口,协议,状态四个元素的列表,原代码直接将完整列表传入ipaddress.IPv4Address作为排序键,该函数仅能识别IP字符串,无法解析列表结构,因此触发格式错误。
  • 还有两个需要修正的细节:
    • CSV第一行是表头,不需要参与排序,需要单独拆分处理
    • 读取到的端口值是字符串类型,直接按字符串排序会出现1080 < 80的逻辑错误,需要转为整数再参与排序
修复后的实现代码
#!/usr/bin/env python3
import csv
import ipaddress

# 读取CSV文件,拆分表头和业务数据
with open('list.csv', 'r', encoding='utf-8') as f:
    reader = csv.reader(f)
    header = next(reader)
    data_rows = list(reader)

# 双维度排序:先按IP地址升序,同IP下按端口号升序
sorted_rows = sorted(data_rows, key=lambda x: (ipaddress.IPv4Address(x[0]), int(x[1])))

# 合并表头输出
output = [header] + sorted_rows

print('After sorting:')
for line in output:
    print(line)
运行输出示例
After sorting:
['IP Address', 'Port', 'Protocol', 'State']
['192.168.3.1', '53', 'tcp', 'open']
['192.168.3.1', '443', 'tcp', 'close']
['192.168.3.7', '8888', 'tcp', 'open']
['192.168.3.12', '443', 'tcp', 'open']
['192.168.3.12', '631', 'tcp', 'open']
['192.168.3.71', '1080', 'tcp', 'open']
['192.168.13.100', '80', 'tcp', 'open']
['192.168.23.12', '80', 'tcp', 'filtered']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:06:03