上下文管理器:打开文件,执行完with语句内容之后,自动关闭文件对象
with open(’/tmp/passwd’) as f:
等同于
f = open(’/tmp/passwd’)
with open('/tmp/passwd') as f1,\
open('/tmp/passwbackup','w+')as f2:
等同于
# 将第一个文件的内容写入第二个文件中
f2.write(f1.read())
with open('/tmp/passwd') as f1:
content = f1.read()
with open('/tmp/passwdbackup','w+') as f2:
f2.write(content)
f2.seek(0,0) 将指针位置放置在开始位置,不然后面打印不出来。因为指针在末尾
print(f2.read())
from collections import Iterable
#Iterable:生成一个对象,可以对其进行遍历
f = open('data.txt')
print(isinstance(f,Iterable))
for i,item in enumerate(f):
if i == 10: # 取出文件中前10个字符
break
print(i,item)
通过yield实现文件的读取
def bylineread(fimename):
with open(fimename) as f:
line = f.readline()
while line:
yield line
line = f.readline()
read:是一个生成器对象
read = bylineread('data.txt')
print(read) 会生成一个生成器
print(next(read)) 通过next读取生成器内容
生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
具体格式为:01-AF-3B-xx-xx-xx
import string
import random
def creat():
dd = '01-AF-3B'
num = string.hexdigits
for i in range(3):
n = random.sample(num,2)
dd = dd + '-'+''.join(n).upper()
return dd
def main():
with open('rr','r+') as f1:
for i in range(100):
ds = creat()
f1.write(ds + '\n')
print(f1.read())
main()
1. 生成一个大文件ips.txt,要求1200行, 每行随机为172.25.254.0/24段的ip; 2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
import random
def ss():
dd = '172.25.254'
s= str(random.randint(0,255))
dd = dd + '.'+str(s)
return dd
def nn():
with open('ips.txt','r+') as f2:
for i in range(1200):
vn = ss()
# print(vn)
f2.write(vn + '\n')
nn()
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'))