python之上下文管理器with用法

上下文管理器with的用法:

1.文件的读取

在这里插入图片描述

2.文件的写入

2.1文件单独写入

with open('file4','a+') as f:
    f.write('today is firday!')
    f.seek(0,0)
    print(f.read())

在这里插入图片描述

2.2将文件1内容,写入文件2

#在python3.x中:
with open('file4') as f,open('file3','w+') as f1:
    f1.write(f.read())
    f1.seek(0,0)
    print(f1.read())

#在python2.x中:
with open('data.txt') as f:
    context=f.read()
with open('data2.txt','w+') as f1 :
    f1.write(context)
    f1.seek(0,0)
    print(f1.read())

在这里插入图片描述
在这里插入图片描述

3.练习1

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

import random
import string
#内置十六进制
#print(string.hexdigits )
def make_mac():  #生成一个mac十六进制字符串
    mac='01-AF-3B'
    for i in range(3):
        newmac=random.sample(string.hexdigits,2) #在十六进制列表中选出两个字符
        mac+= '-'+''.join(newmac)  #连接'-'和随机生成的十六进制字符
    return mac

def  new_file():#生成100个mac十六进制字符串并将其写入文件
    with open('new_file','a+') as f:
        for i in range(100):
            new_mac=make_mac()
            f.write(new_mac+'\n' )
        f.seek(0,0)
        print(f.read())
new_file()

在这里插入图片描述

4.练习2(京东二面)

需求:京东二面编程题

  1. 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
  2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
import random
def new_file(filename):
    with open(filename,'a+') as f:
        for i in range(1200):
            f.write('172.25.254.'+ str(random.randint(1,255))+'\n')
        f.seek(0,0)
def dic(filename,count=10):
    di={}
    with open(filename,'r+') as f1:
        for i in f1:
            if i in di:
                di [i] += 1
            else:
                 di[i] = 1
        print(di)
        sort_ip=sorted(di.items(),reverse=True )[:count]
        return sort_ip
new_file('text')
print(dic('text',11))

运行结果:
{'172.25.254.97\n': 7, '172.25.254.235\n': 11, '172.25.254.224\n': 5, '172.25.254.1\n': 4, '172.25.254.209\n': 6, '172.25.254.230\n': 7, '172.25.254.66\n': 11, '172.25.254.245\n': 5, '172.25.254.162\n': 5, '172.25.254.13\n': 7, '172.25.254.246\n': 6, '172.25.254.206\n': 5, '172.25.254.118\n': 6, '172.25.254.251\n': 4, '172.25.254.2\n': 3, '172.25.254.253\n': 5, '172.25.254.77\n': 9, '172.25.254.57\n': 8, '172.25.254.17\n': 5, '172.25.254.16\n': 9, '172.25.254.241\n': 2, '172.25.254.92\n': 3, '172.25.254.60\n': 8, '172.25.254.142\n': 7, '172.25.254.141\n': 3, '172.25.254.54\n': 7, '172.25.254.116\n': 9, '172.25.254.85\n': 6, '172.25.254.124\n': 2, '172.25.254.200\n': 4, '172.25.254.3\n': 5, '172.25.254.86\n': 4, '172.25.254.49\n': 5, '172.25.254.155\n': 2, '172.25.254.100\n': 7, '172.25.254.195\n': 2, '172.25.254.102\n': 6, '172.25.254.170\n': 6, '172.25.254.171\n': 8, '172.25.254.19\n': 4, '172.25.254.44\n': 8, '172.25.254.177\n': 8, '172.25.254.240\n': 8, '172.25.254.111\n': 7, '172.25.254.78\n': 7, '172.25.254.131\n': 9, '172.25.254.199\n': 8, '172.25.254.149\n': 3, '172.25.254.208\n': 4, '172.25.254.165\n': 5, '172.25.254.244\n': 2, '172.25.254.174\n': 4, '172.25.254.119\n': 4, '172.25.254.101\n': 6, '172.25.254.157\n': 8, '172.25.254.197\n': 6, '172.25.254.248\n': 3, '172.25.254.76\n': 3, '172.25.254.28\n': 3, '172.25.254.125\n': 4, '172.25.254.35\n': 3, '172.25.254.89\n': 8, '172.25.254.217\n': 7, '172.25.254.236\n': 3, '172.25.254.160\n': 9, '172.25.254.163\n': 4, '172.25.254.128\n': 3, '172.25.254.99\n': 7, '172.25.254.5\n': 4, '172.25.254.212\n': 6, '172.25.254.45\n': 8, '172.25.254.221\n': 3, '172.25.254.194\n': 5, '172.25.254.139\n': 3, '172.25.254.74\n': 6, '172.25.254.166\n': 9, '172.25.254.154\n': 6, '172.25.254.210\n': 3, '172.25.254.234\n': 3, '172.25.254.148\n': 5, '172.25.254.150\n': 5, '172.25.254.14\n': 4, '172.25.254.188\n': 1, '172.25.254.25\n': 9, '172.25.254.71\n': 2, '172.25.254.158\n': 3, '172.25.254.107\n': 7, '172.25.254.143\n': 4, '172.25.254.192\n': 5, '172.25.254.146\n': 7, '172.25.254.167\n': 7, '172.25.254.220\n': 4, '172.25.254.11\n': 8, '172.25.254.95\n': 7, '172.25.254.80\n': 6, '172.25.254.123\n': 4, '172.25.254.117\n': 7, '172.25.254.39\n': 5, '172.25.254.153\n': 8, '172.25.254.164\n': 4, '172.25.254.232\n': 5, '172.25.254.136\n': 5, '172.25.254.140\n': 4, '172.25.254.15\n': 4, '172.25.254.84\n': 3, '172.25.254.9\n': 5, '172.25.254.43\n': 11, '172.25.254.190\n': 5, '172.25.254.64\n': 3, '172.25.254.20\n': 7, '172.25.254.41\n': 6, '172.25.254.255\n': 5, '172.25.254.216\n': 4, '172.25.254.88\n': 4, '172.25.254.73\n': 7, '172.25.254.132\n': 5, '172.25.254.27\n': 2, '172.25.254.12\n': 4, '172.25.254.159\n': 3, '172.25.254.36\n': 6, '172.25.254.227\n': 3, '172.25.254.46\n': 5, '172.25.254.121\n': 3, '172.25.254.211\n': 8, '172.25.254.181\n': 7, '172.25.254.87\n': 5, '172.25.254.51\n': 7, '172.25.254.218\n': 5, '172.25.254.103\n': 8, '172.25.254.52\n': 6, '172.25.254.204\n': 5, '172.25.254.215\n': 6, '172.25.254.225\n': 4, '172.25.254.213\n': 7, '172.25.254.175\n': 9, '172.25.254.6\n': 5, '172.25.254.130\n': 9, '172.25.254.23\n': 3, '172.25.254.249\n': 5, '172.25.254.112\n': 8, '172.25.254.115\n': 4, '172.25.254.198\n': 3, '172.25.254.187\n': 8, '172.25.254.228\n': 5, '172.25.254.239\n': 4, '172.25.254.202\n': 4, '172.25.254.65\n': 6, '172.25.254.42\n': 3, '172.25.254.169\n': 3, '172.25.254.250\n': 8, '172.25.254.24\n': 4, '172.25.254.176\n': 4, '172.25.254.8\n': 1, '172.25.254.180\n': 8, '172.25.254.191\n': 3, '172.25.254.173\n': 7, '172.25.254.222\n': 3, '172.25.254.56\n': 5, '172.25.254.238\n': 6, '172.25.254.70\n': 8, '172.25.254.93\n': 9, '172.25.254.182\n': 4, '172.25.254.75\n': 3, '172.25.254.55\n': 3, '172.25.254.193\n': 3, '172.25.254.47\n': 4, '172.25.254.79\n': 3, '172.25.254.7\n': 4, '172.25.254.96\n': 3, '172.25.254.10\n': 3, '172.25.254.201\n': 3, '172.25.254.72\n': 5, '172.25.254.242\n': 7, '172.25.254.91\n': 7, '172.25.254.127\n': 3, '172.25.254.172\n': 5, '172.25.254.231\n': 5, '172.25.254.138\n': 4, '172.25.254.144\n': 5, '172.25.254.22\n': 5, '172.25.254.33\n': 7, '172.25.254.156\n': 4, '172.25.254.205\n': 4, '172.25.254.178\n': 5, '172.25.254.219\n': 3, '172.25.254.189\n': 3, '172.25.254.247\n': 4, '172.25.254.53\n': 6, '172.25.254.37\n': 2, '172.25.254.152\n': 2, '172.25.254.203\n': 7, '172.25.254.21\n': 4, '172.25.254.48\n': 4, '172.25.254.62\n': 3, '172.25.254.161\n': 4, '172.25.254.129\n': 6, '172.25.254.168\n': 5, '172.25.254.110\n': 5, '172.25.254.104\n': 4, '172.25.254.63\n': 6, '172.25.254.40\n': 2, '172.25.254.81\n': 5, '172.25.254.186\n': 5, '172.25.254.233\n': 5, '172.25.254.105\n': 3, '172.25.254.137\n': 3, '172.25.254.243\n': 4, '172.25.254.179\n': 2, '172.25.254.98\n': 2, '172.25.254.90\n': 4, '172.25.254.38\n': 5, '172.25.254.133\n': 6, '172.25.254.114\n': 1, '172.25.254.226\n': 2, '172.25.254.69\n': 5, '172.25.254.32\n': 4, '172.25.254.82\n': 4, '172.25.254.147\n': 3, '172.25.254.254\n': 5, '172.25.254.58\n': 3, '172.25.254.120\n': 2, '172.25.254.196\n': 1, '172.25.254.214\n': 3, '172.25.254.68\n': 7, '172.25.254.183\n': 4, '172.25.254.4\n': 4, '172.25.254.252\n': 4, '172.25.254.83\n': 2, '172.25.254.229\n': 4, '172.25.254.108\n': 6, '172.25.254.151\n': 2, '172.25.254.126\n': 2, '172.25.254.237\n': 4, '172.25.254.26\n': 1, '172.25.254.145\n': 5, '172.25.254.61\n': 1, '172.25.254.94\n': 3, '172.25.254.207\n': 1, '172.25.254.106\n': 2, '172.25.254.67\n': 2, '172.25.254.135\n': 1, '172.25.254.59\n': 3, '172.25.254.184\n': 3, '172.25.254.134\n': 2, '172.25.254.50\n': 1, '172.25.254.18\n': 4, '172.25.254.223\n': 3, '172.25.254.122\n': 2, '172.25.254.113\n': 3, '172.25.254.30\n': 1, '172.25.254.29\n': 1, '172.25.254.31\n': 1, '172.25.254.185\n': 1, '172.25.254.34\n': 1, '172.25.254.109\n': 1}
[('172.25.254.99\n', 7), ('172.25.254.98\n', 2), ('172.25.254.97\n', 7), ('172.25.254.96\n', 3), ('172.25.254.95\n', 7), ('172.25.254.94\n', 3), ('172.25.254.93\n', 9), ('172.25.254.92\n', 3), ('172.25.254.91\n', 7), ('172.25.254.90\n', 4), ('172.25.254.9\n', 5)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值