文件操作

1.文件操作的模式

1.1控制文件读写操作的模式 r模式的使用

r(默认的):只读
w:只写
a:只追加写

r只读模式使用:在文件不存在时则报错,文件存在文件内指针直接跳到文件开头

#小练习:实现用户认证功能
inp_name = 'han'
inp_pwd = '123'

with open('db.txt',mode='rt',encoding='utf-8') as f:
	for line in f:
		u,p =line.strip('\n').stript(':')
		if inp_name ==u and inp_pwd ==p:
			print('登录成功')
			break
		else:
			print('用户名或密码错误') 

1.2 w模式的使用

w只写模式,在文件不存在的情况下会创建空文档,文件存在就会清空文件,文件指针跳到文件的开头
with open('b.txt',mode='w',encoding='utf-8') as f:
	f.write('你好\n')
	f.write('我好\n')

强调:
1.在文件不关闭的情况下,连续的写入,后写的内容一定跟在前写内容的后面
2.如果重新以w模式打开文件,则会清空文件内容

1.3 a模式的使用

a只追加模式,在文件不存在的时,会创建空文档,文件存在将文件指针直接移动到文件末尾

w与a的异同: 相同点:在打开文件不关闭的情况下,连续的写入新的内容总在后面 不同点:以a模式重新打开时,不会清空原文件内容。指针也会移动到最末尾

2. 控制文件读写内容的模式

大前提:t,b模式均不能单独使用,必须与r/w/a之一结合使用
t(默认):文本模式
	1.读写文件都是以字符串为单位的
	2.只能针对文本文件
	3.必须指定encoding参数
b:二进制模式
	1.读写都是以bytes/二进制为单位
	2.可以针对所有文件
	3.一定不能指定encoding参数

2.1 t模式的使用

t模式:如果我们指定的文件打开模式为r/w/a,其实默认就是rt/wt/at
强调:t模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘本质都是二进制的形式,
当指定t模式时,内部帮我们做了编码与解码

2.2 b模式的使用

b:读写都是以二进制为单位
with open('1.mp4',mode='rb') as f:
	data = f.read()
	print(type(data))

强调:
1.在操作纯文本方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更方便
2.针对非文本文件(如图片,视频,音频)只能使用b模式

#做一个拷贝程序

src_file = input('请输入你的源地址').strip()
dst_file = input('请输入你的目标地址').strip()

with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1:\
	open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
	for line in f1:
		f2.write(line)

3.操作文件的方法

读操作
f.read() 读取所有内容,执行完该操作后,文件指针会移动到文件末尾
f.readline()  读取一行内容,光标会移动到第二行首部
f.readlines()  读取每一行内容,存放于列表中

#强调
f.read()与f.readline()都是将内容一次性读入内存,如果内容过大会导致溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:
方式一:
with open('a.txt',mode='rt',encoding='utf-8') as f:
	for line in f:
		print(line)  同一时刻只读入一行内容到内存中

方式二:
with open('1.mp4',mode='rb') as f:
	while True:
		data=f.read(1024)
		if len(data) == 0:
			break
		print(data)

4.主动控制文件内指针移动

f.seek(n,模式) n代表移动字节个数,模式分为0,1,2 f.seek(指针移动的字节数,模式控制) 0:默认的模式,该模式代表指针移动的字节数是以文件开头为参照的f.seek(3,0) 1:该模式代表指针移动的字节数以当前所在位置为参照 f.seek(20,1) 2:该模式代表指针移动的字节数以文件末尾的位置为参照f.seek(10,2) 强调:0模式可以在t和b模式下使用,而1和2只能在b模式下使用

5.文件的修改

原文地址:https://www.cnblogs.com/xiaoxuanworking/p/14349729.html