用python处理一含有300万条ip地址的文本,需得出每个ip在文本中重复的次数。得到一个ip , 次数的文本。
答案:2 悬赏:0 手机版
解决时间 2021-02-18 05:54
- 提问者网友:我一贱你就笑
- 2021-02-17 13:27
使用何种方式能够较为快速的处理出来。请详细的说明一下,谢谢大神!
最佳答案
- 五星知识达人网友:舊物识亽
- 2021-02-17 14:10
300万条不是很多。你可以使用字典,或者是Counter来统计。
通常来讲字典大小略大的时候,效率会很低。所以就要优化算法。
如果想避开字典限制的问题,可以使用redis来记数。速度慢些。但是很靠谱。
处理速度取决于进程数量,如果多进程处理,最后再将数据合并就会快很多。如果使用REDI就不用合并了。REDIS可以采用多进程加多线程方式。
如果还想更快就采用CYTHON,或者是直接用MAP REDUCE,采用多计算机同时处理。绝对快。
还有一个更简单快速的办法,用C语言吧。将IP地址转换成整数。然后用C语言来记数,绝对快。编程也简单。转成整数的方法对于PYTHON也有效。
通常来讲字典大小略大的时候,效率会很低。所以就要优化算法。
如果想避开字典限制的问题,可以使用redis来记数。速度慢些。但是很靠谱。
处理速度取决于进程数量,如果多进程处理,最后再将数据合并就会快很多。如果使用REDI就不用合并了。REDIS可以采用多进程加多线程方式。
如果还想更快就采用CYTHON,或者是直接用MAP REDUCE,采用多计算机同时处理。绝对快。
还有一个更简单快速的办法,用C语言吧。将IP地址转换成整数。然后用C语言来记数,绝对快。编程也简单。转成整数的方法对于PYTHON也有效。
全部回答
- 1楼网友:白昼之月
- 2021-02-17 15:38
import socket
def get_ip():
s = socket.socket(socket.af_inet, socket.sock_dgram)
try:
# doesn't even have to be reachable
s.connect(('10.255.255.255', 0))
ip = s.getsockname()[0]
except:
ip = '127.0.0.1'
finally:
s.close()
return iplinux、windows均测试通过
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯