python操作文件
文件操作
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
参数1:文件名,可以是文件的绝对路径
参数2:option r 读 w 写 b 二进制 a 追加
读文件
要读取一个文件的内容,使用python内置的open()函数,传入文件名和标示符,在读文件的时候,文件一定是要存在的,否则会报IOError。
f = open("1.txt","r") # 标识符"r"表示读 f.read() # read()方法可以一次读取文件的全部内容到内存中 f.close() # 文件使用完毕必须关闭 为了避免在读文件的时候产生IOError,我们使用try......finally try: f = open("1.txt", "r") print(f.read()) finally: if f: f.close()
但是每次都要打开文件、读取文件、关闭文件,操作很麻烦,我们可以使用with语句,它会自动帮我们关闭文件。
with open("1.txt","r") as f: print(f.read()) # read(size) 每次最多读取size个内容 print(f.readline()) # readline() 每次读取一行内容 print(f.readlines()) # readlines() 一次读取所有内容,并返回一个list,其中每个元素就是一行内容
二进制文件读取
之前都是读取文本文件,并且都是utf-8编码格式,接下来我们要读取二进制文件,如图片、视频等,用"rb"模式打开文件即可。
f = open("1.jpg","rb") f.read() # b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 返回一个十六进制的字符串
读取非utf-8编码的文本文件,我们需要给open()函数传入一个encoding参数。如果文本中有一些非法编码的字符,会报UnicoDecodeError,可以再传入一个errors参数。输入中文,python3要在后面加上encoding="utf-8" 指定编码类型。
ENCODING = "gbk" # 我们可以全局声明一下字符编码,下面可以直接使用这个变量 f = open("gbk.txt","r",encoding=ENCODING,errors="ignore") f.read()
写文件
和读文件差不多,只是在open()函数中传入的是"w"或者"wb"表示写文本文件或者写二进制文件。需要写入什么编码格式的内容,也可以通过传入encoding。一定要记得关闭文件。
f = open("1.txt","w",encoding="utf-8") f.write("Hello,world") f.close()
同样,我们也可以使用with语句来写文件。
with open("1.txt","w",encoding="utf-8") as f: f.write("Hello,world")
追加内容到文件
我们可以使用"a"来完成。
f = open("1.txt","a",encoding="utf-8") f.write("Hello,world") f.close()
同样也可以改成with语句。
with open("1.txt","a",encoding="utf-8") as f: f.write("Hello,world")
文件对象f常用的操作方法
fr.read() 把文件的所有内容都读取出来,返回字符串 fr.write(data) 把字符串data写入到文件中,只接收字符串参数 fr.readline() 每次读取文件一行的数据,返回每行数据 fr.readlines() 读取文件内容,返回一个list,每一个元素是一行字符串 fr.name 文件名字 fr.fileno() 文件描述符 fr.close() 关闭文件 fr.encoding() 文件编码 fr.closed 返回bool值,查看文件是否已经关闭 fr.seek() 控制光标位置,文件需要使用b方式打开,偏移量,正数向后偏移,负数向前偏移 参数(offset,whence)offset偏移量(数字) whence 0:开始 1:当前位置 2:最后 fr.tell() 返回文件光标位置 fr.truncate(size) 只有写文件才可以用,清空文件,size表示清空到什么位置
函数的定义
以关键字def开头,紧接着是函数名,相关参数,可以是一个或者多个,然后冒号:回车缩进,紧接着是函数处理过程,形如:
def func(args...): doSomething
函数的参数
def add(x, y): return x + y add(2,3) # 结果是5
参数可以设定默认值,如:
def add( a, b=10 ): #注意:默认值参数只会运算一次 return a+b
冗余参数
def func(*args): #这种定义传递的参数是一个元组 print(args,type(args)) func(10,20) #结果: #(10, 20) <class 'tuple'>
def func(**kw):#使用**定义参数传递的是一个字典 print(kw, type(kw) ) func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式 #结果:{'b': 20, 'a': 10} <class 'dict'>