1 创建文件对象
open()函数用于打开一个文件,并且返回文件对象。
open(file, mode='r',encoding=None) 其中,file是必须传入的参数,mode和encoding是两个重要的默认参数。
file—文件路径(相对路径或绝对路径),找不到会报错;
文件读写处理模式:
r—文件以只读的方式打开,文件的指针放在文件的开头,这是默认的模式;
w—打开一个文件只用于写入,若文件已存在则将文件内容删除,从头开始写入,否则创建新文件;
a—打开一个文件用于追加,若文件已存在,文件指针放在文件的末尾,否则创建新文件;
x—只写模式,创建新文件,若文件已存在则报错;
+—可读可写。
控制文件读写内容的模式:
t—读写的单位是str类型
b—读写的单位是bytes类型
encoding:由于windows系统默认的是gbk格式,所以一定要手动输入utf-8。
使用open()函数一定要保证关闭文件对象,即调用close()函数。# 回收操作系统资源
f = open('text.txt', mode='r', encoding='utf-8')
res = f.read()
print(res, type(res))
f.close()
f.read()
>>>ValueError: I/O operation on closed file.
2 with open()
使用with open() as f:的语法,就不需要手动调用close()函数。
f 是一个可迭代器,可以使用for循环遍历取值。
3 文件处理案例
mode = 'r' 用户输入的数据与文件中的数据库是否匹配
with open('text.txt', mode='r', encoding='utf-8') as f:
for i in f:
inp_name = input("请输入用户名:").strip()
inp_pwd = input("请输入密码:").strip()
x, y = i.strip().split(':')
if inp_name == x and inp_pwd == y: print("输入正确") break else: print("重新输入") else: print("找不到")
mode = 'w' 拷贝一份新文件
with open('text.txt', mode='r', encoding='utf-8') as f1,\
open('text3.txt', mode='w', encoding='utf-8') as f2:
res = f1.read()
f2.write(res)
4 文件处理方法
一般情况下使用for line in f:这种语法,目的是防止文件内容过大,一次性加载会占用过多内存空间。
循环读取文件
方式一:自己控制每次读取的数据量(只针对模式为b的情况)
with open(r'test.jpg',mode='rb') as f:
while True:
res=f.read(1024)
if len(res) == 0:
break
print(res)
方式二:以行为单位读,当一行内容过长时会导致一次性读入内存的数据量过大
with open(r'g.txt',mode='rt',encoding='utf-8') as f:
for line in f:
print(line)
with open(r'g.txt',mode='rb') as f:
for line in f:
print(line) with open(r'test.jpg',mode='rb') as f: for line in f: print(line)
f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾
f.readline() # 读取一行内容,指针移到下一行头部
f.readlines() # 读取每一行内容,存放于列表中
f.writelines() # 参数是列表
5 控制文件读写内容的模式
mode = 't'
——只针对文本文件
——读写都是str类型的字符,表示unicode字符
——必须指定编码格式,即encoding参数的值
mode = 'b'
——针对所有类型的文件(图片、视频等)
——读写都是bytes类型的字符,表示按照特定编码方式编码后的字符
——不能指定编码格式
6 控制文件内指针移动
文件内指针移动都是以字节为单位的,唯一例外的是t模式下的read(n),n是以字符为单位。
模式控制:
0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的;
1: 该模式代表指针移动的字节数是以当前所在的位置为参照的;
2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的;
强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用。
7 修改文件两种方式
(1)将文件内容一次性加载入内存,在内存中修改完毕后再覆盖硬盘中的源文件。
(2)将源文件一行一行加载入内存,再创建一个新文件,将修改好后的内容一行一行写入新文件,写入完成后用新文件替换源文件。