文件练习
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')
其输出如下: