Python-文件处理-文件处理流程

一、文件处理流程
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件

#创建新文件名为可乐
f = open('可乐',encoding = 'utf-8')  # f为句柄;encoding若不定义默认是Windows系统编码方式运行会出现乱码
data = f.read()  #打印可乐文件中所有内容
print(datat)  
f.close()  #关闭文件

4、文件的获取方式有:
r,只读模式:默认模式;文件必须存在,不存在则抛出异常
w,只写模式:不可读;不存在则创建;存在则清空文件内容
x,只写模式:不可读;不存在则创建,存在则报错
a,追加模式:可读;不存在则创建;存在则追加内容

r+,读写:可读可写
w+,写读:可读可写
x+,写读:可读可写
a+,读写,可读可写

# 1)只读模式
f = open('可乐','r',encoding = 'utf-8') 
#data = f.read()  #若先打印read(),readline后打印为空
print(f.readable())   #True  判断获取方式是否可读
print(f.readline())  #打印文件的第一行,再写一遍读取行数自增一
print(f.readline())   #打印文件第二行
print(f.readlines())   #把文件内容以列表形式读取出来放在一个列表中
f.close()

# 2)只读模式
f = open('可乐','w',encoding = 'utf-8') 
#data = f.read()  #报错,此模式为只写模式
f.write('111\n')  #所写内容自动保存在打开文件中,需要手动换行
print(f.writable())   #判断是否可写
print(f.writeline(['111\n','222\n']))   #以列表形式写参数,写的参数必须是字符串

# 3)追加模式
f = open('可乐','a',encoding = 'utf-8') 
f.write('好喝')  #与只写模式差不多,只是将参数写在文件最后一行不对文件进行清空
f.close()

# 4)r+模式
f = open('可乐','r+',encoding = 'utf-8') 
data = f.resd()
print(data)
f.write('可口')  #参数值直接写在文件后面且不换行

 # 5)w+可读可写模式:把光标所在位置用参数覆盖

补:

src_f = open('可乐','r',encoding = 'utf-8') 
data = src_f.readlines()  
src_f.close()
print(data)
dat_f = open('可乐','w',encoding = 'utf-8') 
dat_f.write(data[0])  #相当于取出第一行。重新赋给可乐文件,也相当于删除第二行
dat.close()

补:无需进行close()操作

# 1)
with open('kl','w') as dst_f:  # as:句柄等号赋值转化为as
     #对文件进行操作
# 2)对两个打开文件进行操作
#src_f = open('kl','r',encoding = 'utf-8') 
#dat_f = open('kl','w',encoding = 'utf-8') 
with open('kl','r',encoding = 'utf-8') as src_f,\
		open('kl','w',encoding = 'utf-8') as dst_f:
	data = scr_f.read()
	dst_f.write(data)

6、b表示一字节的方式操作
rb或者r+b
wb或者w+b
xb或者x+b
ab或者a+b
注:以b的方式打开时,读取读取到的内容是字节型,写入时也需要提供字节类型,不能指定编码(以三进制处理的文件可跨平台)
补:在Windows中回车\r\n;Liuxe和uniex回车是\n

# 1)
f = open('可乐','rb') #b的方式不能指定编码
data = f.read()
print(data)
print(data.decode('utf-8')) #以utf-8的方式读取
f.close()
# 2)
f = open('可乐','wb') #b的方式不能指定编码
f.write(bytes('喝\n',encoding = 'utf-8'))
f.write('喝'.encode('utf-8'))
# 3)
f = open('可乐','ab') #b的方式不能指定编码
f.write('喝'.encode('utf-8'))

7、文件的其他处理方式
f = open(‘可乐’,‘r+’)

f = open('可乐','r+')
# 1) 
print(f.closed) #判断文件是否关闭 False
# 2)
print(f.encoding) #文件打开的编码
# 3)
print(f.errors) #关于编码的报错
# 4)
f.flush() #将文件内容从内存刷到硬盘
# 5)
print(f.tell()) #显示光标当前所在位置
#在utf-8中回车占2个字节:\r\n-->python自动处理成\n-->用newline=''显示原始
f=open('可乐','r',encoding = 'utf-8',newline-='')
print(f.readlines()) #['喝可乐\r\n','hhh']
	#若去掉newline='' ['喝可乐\n','hh']
# 6)
f.seek(3) #控制光标所在位置,从头开始算
print(f.tell()) #3
#注:read(3)代表读取3个字符,其余文件光标移动都是以字节为单位如:seek、tell、read、truncate
data = f.read(3)
print(data)  #喝可乐
#7)
f.truncate() #文件截断
#补:seek()内容
	#(1)
	f.open('可乐','rb')
	print('f.tell()')  #0
	f.seek(10,1)
	print(f.tell()) #10
	f.seek(3,1)  #相对位置
	print(f.tell())  #13
	#(2)
	f=open('可乐','rb')
	print('f.tell()')  #0
	f.seek(-5,2)  #倒着seek
	print(f.read()) #b'\r\nhhh'
	#(3)循环文件的方式
	for i in f:
		print(i) #文件内容一行一行输出
		# 补:获取日志最后一行
			if i in f:
				offe = -10
				whille True:
					f.seek(off,2)
					data = f.readlines()
					if len(data)>1:
						print('文件最后一行是%s',%(data[-1].decode('utf-8')))
						break
					offe *= 2	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值