京东二面编程题

  1. 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
  2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
import random


def create_ip_file(filename):
    # 字符之间的拼接,数字与字符之间不可以拼接
    ips = ['172.25.254.' + str(i) for i in range(1, 255)]
    print(ips)
    # 创建一个大文件,储存ip地址
    with open(filename, 'a+') as f:
        for count in range(1200):  # 循环1200次,生成1200个ip地址
            print(random.sample(ips, 1))  # 打印出ip地址
            # 生成的是一个列表,列表中存放的是所有ip地址,每次取第一个位置上的ip并换行
            f.write(random.sample(ips, 1)[0] + '\n')


create_ip_file('ips.txt')

# 创建一个函数,用于统计ip出现的频率,计算出现率最高的前10个ip
def sorted_ip(filename, count=10):
    ips_dict = dict()
    with open(filename) as f:
        for ip in f:
            if ip in ips_dict:
                ips_dict[ip] += 1
            else:
                ips_dict[ip] = 1
    # sorted(iterable,key=None,reverse=False)适用于任何可迭代容器,
    # 调用后返回的是已经排好序的iterable,不改变原来的列表
    # [:count]计算数组中的单元数目,或对象中的属性个数
    sorted_ip = sorted(ips_dict.items(),
                       key=lambda x: x[1], reverse=True)[:count]
    return sorted_ip


print(sorted_ip('ips.txt'))

京东二面编程题_第1张图片京东二面编程题_第2张图片

你可能感兴趣的:(python)