上下文管理器,yield实现文件的读取

本文深入探讨了Python中上下文管理器的使用,包括如何利用with语句简化文件操作,通过生成器实现文件逐行读取,以及如何使用集合和字典统计文件内容。同时,还介绍了如何生成特定格式的数据并写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上下文管理器:打开文件,执行完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'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值