python 文件处理

一、文件处理的基本流程

1.打开文件获得句柄并赋值给一个变量。

2.通过句柄对文件进行操作。

3.关闭文件。

f = open("D:/1.txt",encoding='utf-8')#打开文件获取句柄
print(data)#输出文件内容
f.close()#关闭文件

二、文件的打开模式

1.r,只读模式(默认模式,文件必须存在,不存在则抛出异常)。

f = open("D:/1.txt",'r',encoding='utf-8')#以只读模式打开文件获取句柄,文件必须存在,若不存在则抛出错误。

f.read()#读取文件,会挪动光标值文件的末尾,再次通过readline或者read读取不到任何内容。
f.readable() #文件是否可读

f.readline() #一次读取一行,读取后光标自动挪至下一行,若当前行不存在则为空
f.readline() #读取第二行
print(f.readline() ,end=None)#readline读取时,如文件最后为换行符会将其读取出来,可以通过end方式来去掉换行符。
f.readlines()#将文件内容全部放入列表中,并显示所有的隐藏字符:\t,\n等

2.w,只写模式(不可读,不存在则创建,存在则清空内容)。

w = open("D:/1.txt",'w',encoding='utf-8')#文件只读模式,如果文件存在,会将文件清空并进行接来下的操作,如果文件不存在,会新建文件并进行操作
w.write('11111\n') #文件写入的时候,不会自动换行,必须添加换行符。
w.write(1)#TypeError: write() argument must be str, not int,写的参数必须是字符串,不能为数字类型
w.writable() #检测文件是否可写入

w.writelines(['1111\n','222\n']) #以列表的形式传参,可以一次写入多个参数。写的参数必须是字符串,不能为数字类型
3.a,追加模式(可读,不存在则创建,存在则只追加内容)。
a = open('D:/1.txt','a',encoding='utf-8')
a.write("last") #会将last追加至文件的最后

4.x,只写模式(不可读,不存在则创建,存在则报错)。

x = open('D:/1.txt','x',encoding='utf-8')

5."+"表示可以同时读写某个文件。

#r+,可读可写
#w+,可读可写
f = open('D:/1.txt','a',encoding='utf-8')
f.writable()
True
f.readable()
True

6.b,表示以字节码的方式操作,python默认打开文件的模式为t(文本模式),图片等其他不适合用文本格式打开的可是使用此模式。

#rb 或 r+b
#wb 或 w+b
#xb 或 x+b
#ab 或 a+b

f = open('d:/1.txt','rb')#以b的方式读取文件不需要指定文件的编码格式
data = f.read()
b'11111\r\n' #window下换行为\r\n
data.decode('utf-8')#对读取的内容进行解码

三、常用的方法和属性

f = open('a.txt','w')
f.encoding #文件open打开文件时的编码
f.close()#关闭文件
f.closed #文件是否关闭
f.errors #关于编码的报错,不常用
f.flush() #将内存里面的数据刷到硬盘上
f.name #文件名
f.tell() #光标当前所在的位置
f = open('1.txt','r',encoding='utf-8',newline='')#python会文件的换行符转为\n,使用newline可以终止这种行为。
f.truncate(10)#写操作,会将0到10保留,10字节以后清除
f.read(3)#read(3)代表读入三个字符,其余文件内的光标移动都是以字节为单位

f.seek(10,0)#绝对位置,将光标从0向后移动10个字节,中文占用多个字节,若光标移动到中间的字节,可能会出错。
f.seek(10,1)#相对位置,相对于光标上一次停留的位置向后移动10个字节
f.seek(-10,2)#必须将文件以b方式打开,从文件末尾向前移动10个字节

#取大文件的最后一行
for i in f:#循环文件的推荐方式
    offs = -10 #偏移量
    while True:
        f.seek(offs,2)#倒着读取3个字节
        data = f.readlines()
        if len(data) > 1 :#如果读出来的行数大于一
            print('文件的最后一行是%s' % (data[-1].decode('utf-8')))
            break
        offs *= 2

四、其他

#文件没有修改,只有覆盖
#在打开文件时,光标处于文件的初始位置,此时写入会直接从初始位置对文件内容进行覆盖,若先读取,将光标移至最后,则不会覆盖。

#只保留文件x的第一行
f = open('x','r',encoding='utf-8')
data = f.readlines()
f.close()

w = open('x','r',encoding='utf-8')
w.write(data[0])
w.close()

#修改文件的第3行
data[2] = "123"
w.writelines(data)

#with 将关闭文件的操作交给系统
with open("xxx") as f: #打开xxx文件,并将句柄交给f
    pass

with open('x','r') as a ,open('y','w') \
        as b:#若python的行太长,可以通过\对其记性截断,并在下一行书写,若同时读和写一个共同的文件会发生冲突
    pass


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值