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'>

 

posted @ 2018-04-13 20:50  quartzite  阅读(313)  评论(0编辑  收藏  举报