(1)文件的写入和读取

首先在python3中操作文件只有一种选择,那就是open()

而在python2中则有两种方式:file()与open() 两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,

但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file

语句格式

with open(filename,mode='r',encoding='utf-8') as file:  #通过关键词with 和open函数以指定模式和字符格式打开并赋值给一个变量

with关键词    #会自动执行一个close()的动作,即程序结束自动关闭文件进行保存

open()    #是一个打开函数,用来做文件打开动作

filename    #是文件名或者文件路径

mode     #是打开的模式

encoding    #指定读取文件的模式   PS:文本文件打开时一定要指定字符串的打开模式

as   #也是关键词

file   #是一个变量

打开文件的模式有

(默认为文本模式,t模式):

r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

w,只写模式【不可读;不存在则创建;存在则清空内容】

a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】

PS:对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)

rb   #以bytes的模式只读打开

wb  #以bytes的模式复写

ab   #以bytes的模式追加

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

 例:with open('e.txt',mode='wb') as f:

              f.write('你好啊 '.encode('utf-8')   #这里在用b模式写入时,必须编码成指定的格式写入磁盘

文件内的指针移动(就是在打开或者写入的时候指定在哪个位置打开或者写入)

主动控制文件内指针的移动

seek(参数1,参数2)   #如果用参数的值是2,则光标移动到指针末尾,这时候参数1要指定从末尾往前读多少个字节,则必须是  - number开始,而不能是正number

参数1: 控制的移动的字节个数

参数2: 控制参照的位置

0(默认的):参照文件开头

1:参照指针当前所在位置

2:参照指针文件末尾

PS:强调:只有0模式可以在普通模式下使用,1和2模式只能在b模式下使用

例:with open('e.txt',mode='rb') as f:

             f.seek(6,0)

             f.read(3)

             f.seek(3,1)

             print(f.tell())

             print(f.read().decode('utf-8'))

             f.seek(-8,2)

            print(f.read().decode('utf-8'))

            f.seek(0,2)

            print(f.tell())

了解部分

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

r+, 读写【可读,可写】  #r模式的特性就是只读并不存在擦除或者覆盖的功能,那么读写模式就是在写入时候将内容添加到了文件的末尾

w+,写读【可读,可写】 #w模式的特性就是先擦除在写入,所以使用w+模式打开的时候就是先把文件清空了,再写入新内容,只是给写入模式增加了一个读取的功能而已

a+, 写读【可读,可写】 #a模式的特性就是追加,并不会像w模式这样擦除原内容,所以也就是给追加模式添加了一个读取模式

x, 只写模式【不可读;不存在则创建,存在则报错】

x+ ,写读【可读,可写】

读写文件的一些操作
f.read()   #读取所有内容,光标移动到文件末尾

f.readline() #读取一行内容,光标移动到第二行首部

f.readlines() #读取每一行内容,存放于列表中

f.write('1111 222 ') #针对文本模式的写,需要自己写换行符

f.write('1111 222 '.encode('utf-8')) #针对b模式的写,需要自己写换行符

f.writelines(['333 ','444 '])   #文件模式

f.writelines([bytes('333 ',encoding='utf-8'),'444 '.encode('utf-8')])   #b模式 

 f.readable()   #文件是否可读

f.writable()   #文件是否可读

f.closed  #文件是否关闭

f.encoding   #如果文件打开模式为b,则没有该属性

f.flush()   #立刻将文件内容从内存刷到硬盘 f.name

关于read

1. 文件打开方式为文本模式时,代表读取3个字符

2. 文件打开方式为b模式时,代表读取3个字节

其余的文件内光标移动都是以字节为单位如seek,tell,truncate

PS:seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

PS:truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

 

seek有三种移动方式

0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

truncate是截断文件

所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

原文地址:https://www.cnblogs.com/shizhengquan/p/9887711.html