gpt4 book ai didi

shell - 用于将 IPv6 地址转换为数字(或字符串)的大型 CSV 文件的脚本

转载 作者:行者123 更新时间:2023-12-01 01:28:17 26 4
gpt4 key购买 nike

所以我有一个很大的 csv 文件,超过 1GB。有一个列包含 ipv4 和 ipv6 中的 IP 地址。我想将 ipv6 地址转换为数字,但 libre 计算的行太多。所以我想知道是否可以在终端中使用python来转换所有的ipv6地址。

另外,我可以将文件分成更小的部分,然后使用 libre calc,但同样的问题 - 我也不知道如何编写脚本。

编辑:

我不介意,不过事情可能会变得更复杂。也不确定应该如何格式化,但我希望人们明白......所以我有一张包含 IPv6 地址的表,如下例所示:

2001:db8::cafe:1111
2001:db8:0:a:1:2:3:4
2001:db8:aaaa::c
2001:db8:0:0:1::4

有很多不同的规则来控制格式——对我来说太难了。我听说 python 有一个专门返回转换的函数,但不确定其余的(如何将返回的值正确返回到 csv 中,格式不变等)。不管怎样,这是另一个表中的一行:

"58569107296622255421594597096899477504","58569107375850417935858934690443427839","NG","Nigeria","Abuja Federal Capital Territory","Abuja","9.057350","7.489760"

所以我需要匹配的部分是前两个数字(前两列),其中有几个范围

"0","340282366920938463463374607431768211455"

所以我想获取 IPv6 地址,将它们转换为 IP 号码,然后将它们分类到各自的范围中。

最佳答案

是的,您可以在 Python 中执行此操作。我将用一些简短的片段和文档链接进行演示,这些片段不足以提供完整的解决方案,但有利于为您提供自行组合各个部分所需的资源。

首先,如果您想逐行加载一个 CSV 文件并写入第二个文件,则可以这样做:

>>> import csv
>>> with open('eggs.csv', newline='') as in and open('omellette.csv', 'w') as out:
... r = csv.reader(in)
... w = csv.writer(out)
... for row in r:
... print(', '.join(row)) # print unmodified
... row[0] = ipToNum(row[0])
... row[1] = ipToNum(row[1])
... print(', '.join(row)) # print modified
... w.writerow(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

可以在此处找到此示例所基于的原始内容以及有关 python 内置 CSV 功能的其他信息:

您可能需要根据特定 CSV 文件的确切格式进行调整。现在,要将 IP 地址转换为数字,您可以执行以下操作:

import socket, struct

def ipToNum(ip):
"convert ipv4/6 string to long integer"
return struct.unpack('>L',socket.inet_pton(ip))[0]

def numToDottedip(n):
"convert long int to ipv4/6"
return socket.inet_ntop(struct.pack('>L',n))

这个例子改编 self 在这里找到的内容:

您必须修改它

此外,如果您想了解有关套接字和结构模块的更多信息,请参阅以下文档:

您不需要拆分文件,因为 CSV reader 对象一次仅返回一行,而不是一次读取整个文件。当然,您可能还想在读入这些数字后实际对它们执行一些操作,但由于您没有指定,我会为您解决这个问题。

另请注意,我尚未尝试过任何此代码。这里值得以比喻的形式重复一遍:我是在授你以鱼,而不是授你以鱼。接受这个建议并努力让它自己发挥作用符合您的最大利益,因为这将是您真正成为一名程序员的第一步。

关于shell - 用于将 IPv6 地址转换为数字(或字符串)的大型 CSV 文件的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53145963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com