文件练习

1.生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B

import string
import random

# 随机生成一个MAC地址的函数
def creat_mac():
    MAC= '01-AF-3B'
    # 生成16进制的数
    hex_num = string.hexdigits
    for i in range(3):
        # 从16进制字符串中随机选出2个数来(返回值为列表)
        n = random.sample(hex_num,2)
        # 拼接列表中的内容,将小写字母转换为大写
        sn = '-' + ''.join(n).upper()
        MAC += sn

    return MAC

# 主函数,随机生成100个MAC地址
def main():
    # 以写的方式打开文件
    with open('mac.txt','w') as f:
        for i in range(100):
            mac= creat_mac()
            print(mac)
            # 每生成一个MAC地址,存入文件(注意换行)
            f.write(mac+'\n')

main()

输入如下:
文件练习

2.京东二面编程题
(1). 生成一个大文件ips.txt,要求1200行, 每行随机为172.25.254.0/24段的ip;
(2). 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
第一步:生成ips.txt文件

import random

def create_ip_file(filename):
    ips = ['172.25.254.' + str(i) for i in range(0,255)]
    print(ips)
    with open(filename,'a+') as f:
        for count in range(1200):
            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
    sorte_ip = sorted(ips_dict.items(),key=lambda
        x:x[1],reverse=True)[:count]
    return sorte_ip

print(sorted_ip('ips.txt'))

其输出如下:
文件练习

3.读取文件方式效率比较
之前在学习装饰器时写过一个记时器,可以用它来测试with打开文件在pthyon2和python3中的效率差异

import time
import functools


def timecal(fcb):
    """这是一个装饰器timecal"""

    @functools.wraps(fcb)
    def ing(*args, **kwargs):
        """这是一个ing函数"""
        # 在执行函数之前记时:
        start_time = time.time()
        # 然后执行函数
        res = fcb(*args, **kwargs)
        # 执行函数之后记时:
        end_time = time.time()
        print('函数的执行时间为%.6fs' % (end_time - start_time))
        return res

    return ing


@timecal
def copy(orgfile, copyfile):
    with open(orgfile) as f:
        content = f.read()
        with open(copyfile, 'w') as f1:
            f1.write(content)


@timecal
def copy_t(orgfile, copyfile):
    with open(orgfile) as f, \
            open(copyfile, 'w') as f1:
        f1.write(f.read())


copy('data.txt', 'data_co')
copy_t('data.txt', 'data_co1')

其输出如下:
文件练习