上下文管理器with的用法:
- 打开文件,对文件操作后,可自动关闭文件
- 打开文件的六种模式依旧生效python打开文件的六种模式
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(京东二面)
需求:京东二面编程题
- 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
- 读取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)]