python——文件

本文详细介绍了文件操作的基本步骤,包括打开、读写和关闭文件的方法。深入解析了不同模式(如'r'、'w'、'a'、'r+'、'w+'、'a+')下的文件读写行为,以及如何处理文件不存在的情况。同时,文章还提供了实用的代码示例,如生成随机数文件、MAC地址生成和统计IP频率等。

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

1.文件读取的三部曲:打开 —> 操作 ----> 关闭

      可以先将文件复制到目录下 进行操作
[root@localhost mnt]# ls
passwd

第一步打开文件

f = open('/mnt/passwd')

第二步:操作

print(f)

关闭

f.close()

r(默认参数)

-只能读,不能写
-读取文件不存在 会报错
FileNotFoundError: [Errno 2] No such file or directory: '/mnt/westos’

f = open('/mnt/passwd' )          文件是可以读取的,这里的 ‘r’ 默认时已经存在了,
# print(f)
con = f.read()
print(con)
f.close()

###如果在添加 r 的话是会出现报错的

f = open('/mnt/passwd' 'r' )
# print(f)
con = f.read()
print(con)
f.close()

Error: [Errno 2] No such file or directory: '/mnt/passwdr'      就会出现了报错的

在 默认是r 的状态下 是不可以写的 会出现报错的

f = open('/mnt/passwd' )
# print(f)
con = f.write('abs')
print(con)
f.close()

io.UnsupportedOperation: not writable

在文件不存在的时候,读取也是会出现报错的

f = open('/mnt/westos' )         这个/mnt/westos文件不存在的时候是会出现报错的
# print(f)
con = f.read()
print(con)
f.close()

Error: [Errno 2] No such file or directory: '/mnt/westos'

w(写)

-write only
-文件不存在的时候,会自动创建新的文件
-文件存在的时候,会清空文件内容并写入新的内容

f = open('/mnt/passwd' ,'w' )          在是w属性的时候,只使用read是会出现报错的
con = f.read()
print(con)
f.close()

在是w的状态下是可以写的,并且能够输出字节

f = open('/mnt/passwd' ,'w' )
con = f.write('hello python')
print(con)
f.close()

实验效果
12

并且文件不存在的时候,会自动创建新的文件
在这里插入图片描述
当文件存在的时候,会情况之前的文件内容并写入新的内容
在这里插入图片描述

a(追加)

-write only
-写:不会清空文件的内容,会在文件末尾追加
-写:文件不存在,不会报错,会创建新的文件并写入内容

f = open('/mnt/westos' ,'a' )     是追加的情况下,是不可以读取的会出现报错的
con = f.read()
print(con)
f.close()

当文件已经存在的时候,不会清空文件的内容,会在文件末尾追加
在这里插入图片描述
当文件不存在的时候,不会报错,会写入新的文件及其内容
在这里插入图片描述

r+

-r/w
-文件不存在,报错
-默认情况下,从文件指针所在位置开始写入

当是r+的状态 可以读取也可以写入

f = open('/mnt/redhat' ,'r+' )   可以读取
con = f.read()
print(con)
f.close()

实验效果
hello  boy and girl

当文件已经存在的情况下,会从文件指针所在的位置开始写入

在这里插入图片描述
当文件不存在的是会出现报错的

f = open('/mnt/docker' ,'r+' )
con = f.write('hello python')
print(con)
f.close()

Error: [Errno 2] No such file or directory: '/mnt/docker'

w+

-r/w
-文件不存在,不报错
-会清空文件内容

当文件存在的时候,会清空文件文件内容,可以自行写入文件内容

在这里插入图片描述
当文件不存在的时候,不报错
在这里插入图片描述

a+

-r/w
-文件不存在,不报错
-不会清空文件,在末尾追加

当文件不存在的时候,写入或者查看不报错

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

当文件已经存在的时候,不会清空文件内容,会一直在末尾追加

在这里插入图片描述

告诉当前的文件指针所在的位置 print(f.tell())
f = open('/mnt/westos' ,'a+' )
con = f.write('hello world')
print(con)
print(f.tell())
f.write('hello boy')
print(f.tell())
f.close()

实验效果
11
55
64
判断文件对象拥有的权限

print(f.readable())
print(f.writable())

在这里插入图片描述

读取图片 音频 视频(非纯文本文件)需要通过二进制的方式读取和写入

-读取纯文本
r r+ w w+ a a+ == rt rt+ wt wt+ at at+
-读取二进制文件
rb rb+ wb wb+ ab ab+

在这里以图片作为案例

在这里插入图片描述

在这里插入图片描述
读取文件内容,按照文件内容的大小分别有不同的的读取方式
小的文件直接使用read读取即可

大的文件(文件的大小>=内存大小)
第一种,按行读取

f = open('/mnt/passwd','rb+')
print(f.readline())

第二种,按字节读取

f = open('/mnt/passwd','rb+')
print(f.read(3))         读取第三个字节
 print(f.tell())

读取文件内容,并返回一个列表,列表元素分别为文件的行内容

f = open('/mnt/passwd','rb+')
print(f.readlines())

[b'hello python']

指针的移动
seek:指针移动
第一个参数:偏移量 >0:代表向后移动 <0 代表向前移动
第二个参数:
0:移动指针到文件开头
1:当前位置
2:移动指针到末尾

f = open('/mnt/passwd','rb+')
print(f.readlines())
f.seek(1,2)

练习
读取内容,返回一个列表,去掉后面的\n

f = open('/mnt/passwd')
print(list(map(lambda x:x.strip(),f.readlines())))
print([line.strip() for line in f.readlines()])
f.close()

创建文件data.txt 文件共100000行,每行存放以一个1~100之间的整数

import random      随机模块
f = open('data.txt','a+')     创建一个新的文件
for i in range(100000):    循环100000次里边的寻找1,100的随机数
    f.write(str(random.randint(1,100)) + '\n') 
f.seek(0,0)       指针移到文件开头的位置,方便查看
print(f.read())
f.close()

上下文管理器:打开文件,执行完with语句内容之后,自动关闭文件

with open('/mnt/passwd') as f :      
    print(f.read()) 			创建新的文件并且阅读它
    # print('with里面的语句:',f.close())
    # print(f.close())
print('after with语句',f.close())

实验效果一部分
after with语句 None

将第一个文件的内容写道第二个文件中

with open('data.txt') as f,open('data2.txt','w+') as f2:
    f2.write(f.read())   	 f2所写的就是f所看到的
    f2.seek(0,0)   			将f2放置在最前面
    print(f2.read())

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

import string
import random                #需要随机数和字符串
def creat_Mac():
    MAC='01-AF-3B'
    hex_num = string.hexdigits         生成所有的随机数
    for i in range(3):					MAC地址总共三6位,而题目已经给出了三位,现在只需要再循环三位就行
        x = random.sample(hex_num,2)
        xp = '-' + ''.join(x).upper()		   因为MAC地址都是大写的,所以要全部改为大写的
        MAC +=xp
    return MAC            返回一个MAC地址数值,并且不断的循环
def mac():                   主函数
    with open('mac.txt','w') as f:                  写一个新的文件,之前的MAC地址数值放到这个文件里边
        for i in range(100):
            mac = creat_Mac()             接受之前的mac文件
            print(mac)
            f.write(mac + '\n')             换行,如果不进行换行的话,是会导致生成的文件,全部在一起,查看很麻烦
mac()            最后调用函数。

1、生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip
2、读取ips.txt文件统计这个文件中ip出现频率前10的ip

import random
def creat_ip():
    ip='172.25.254'         ###在这里的ip是一个字符串
    n=random.randint(0,255)         ###生成一个0到255的随机ip
    sn ='.' + str(n)+'/24'               ##  在这里转换为同类型才能相加
    ip +=sn         
    return ip           ##  持续循环并且相加
def ips_num():
    with open('ips.txt','w') as f:             ###  创建一个新的文件目的是将生成的ip放入里边
        for i in range(1200):    
            ips = creat_ip()            ###接受所生成的ip
            print(ips)
            f.write(ips + '\n')     ###换行输出
# ips_num()
def sorted_ip(filename,count=10):      ### filenmae:创建一个新文件    count=10 :表示10行,题目中所说的是10行,当然多少行的都是可以的。
    ips_dict = dict()						###方便统计放入一个地址
    with open(filename) as f: 			##创建新文件
        for ip in f:					
            if ip in ips_dict:       ##如果这个ip在这个字典里边 加1   
                ips_dict[ip] +=1
            else:           ##不在 就是第一次,等于1
                ips_dict[ip]=1
    sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse =True)[:10]    ###排序  ps_dict.items(),key=lambda x:x[1]  字典里边排序给一个key,返回一个value值 reverse =True  倒叙
    return sorted_ip     
print(sorted_ip('ips.txt'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值