A
1、首先文件读写操作有以下几种模式:
a\a+ w\w+ r\r+
a模式:追加_写入模式,写入指针默认在开头,如果文件存在将在开头追加写入,如果文件不存在将创建文件再写入。
a+模式:追加_读写模式,可读可写,写入指针默认在末尾,如果文件存在将在末尾追加写入,如果文件不存在将创建文件再写入。
w模式:写模式,如果文件存在,把文件覆盖再写入,如果文件不存在将创建文件再写入。
w+模式:写读模式,可写可读,如果文件存在,把文件覆盖再写入,如果文件不存在将创建文件再写入。
r模式:读模式,如果文件存在,可读取文件数据,如果文件不存在读取将会报错。
r+模式:读写模式,可读可写,如果文件存在,可读取或写入文件数据,如果文件不存在读或写取将会报错。
2、而使用以上操作模式可以通过 open() 函数操作文件;
a、以下是open()使用方式
1 a_file = open(‘文件路径‘,‘操作模式‘)
例: w模式
a_file = open(‘testf.txt‘,‘w‘,encoding=‘utf-8‘) #这里传入的第一个参数是路径及文件名,第二个参数是文件操作模式,第三个参数是字符编码。 a_file.write(‘测试写入‘) #这里使用到 open()的内置函数 write() 通过这个函数可以往里面写入数据,注意:write()传入的是str()字符串。
上面例子,是在当前的目录下打开testf.txt文件并向这个文件里面写入“测试写入”,如果这个当前目录下这个文件不存,
那么将会创建一个文件并写入,如果当前目录已经存在,那么将会打入写入数据并覆盖之前文件。
例:w+模式
a_file = open(‘testf.txt‘,‘w+‘,encoding=‘utf-8‘) a_file.write(‘我出现了‘) a_file = open(‘testf.txt‘,‘w+‘,encoding=‘utf-8‘) bf=a_file.read() print(bf)
执行后结果:
>>>我出现了
通过上面例子,w+是可以写也可以读取文件数据。
例: r模式 与 r+模式
a_file = open(‘testf.txt‘,‘r‘,encoding=‘utf-8‘) af=a_file.read() print(af) >>>我出现了 a_file = open(‘testf.txt‘,‘r+‘,encoding=‘utf-8‘) a_file.write(‘我又出现了‘)#这里直接使用了write写入,直接把‘我出现了’覆写了。在这之前可以,先读文件,之后再写文件,这样就可以在后面追加数据了。 bf=a_file.read() print(bf) >>>我又出现了
例: a模式 与 a+模式
a_file = open(‘testf.txt‘,‘a‘,encoding=‘utf-8‘) a_file.write(‘我出现了A‘) a_file = open(‘testf1.txt‘,‘a+‘,encoding=‘utf-8‘) a_file.write(‘创建一个新的文件了‘) a_file.seek(0)#文件指针位置,因为a+模式后指针停在末尾,通过seek(0)可以把指针位置调到0位置就是文件的开头。 bf=a_file.read()#如没有上一句代码seek(0),这里将读不到文件 a_file.close()
print(bf) >>>创建一个新的文件了
注意,a、a+ 在数据追加后,文件指针位置就停留在数据的尾端,如果没有seek(0),直接read()读取的话是读取不到数据的。
close() 在这里出现了,close()表示关闭文件句柄对象(这里a_file就是文件句柄对象),在每次文件操作完毕之后都要使用这个函数来闭。
3、with 上下管理理器
使用方式
with open(‘testw.txt‘,‘a+‘,encoding=‘utf-8‘) as f:#这里就直接通过with打开文件,as 是给打开的文件一个别名,这里别名为 f 相当于变量。 a_file.write(‘创建一个新的文件了‘) a_file.seek(0) bf=a_file.read() print(bf) >>>创建一个新的文件了
这里使用的with,每次操作完文件后就不需要close()来关闭文件句柄对象,with内部已经做了处理。
B
1、上面的文件操作方式,如果直接使用来读取图片文件时,将会报错,图片如果通文件方式来打看到是一堆的乱码,这是因为里面都是二进制数据
python 读取二进制文件,可以通过以下方式来读写。
ab rb wb
rb 以二进制读模式打开
wb 以二进制写模式打开
ab 以二进制追加模式打开
rb+ 以二进制读写模式打开
wb+ 以二进制读写模式打开
ab+ 以二进制读写模式打开
例:ab模式
with open(‘123.png‘,‘rb‘) as f: a=f.read() print(a)
这里的操作方式以上述操作一样、