文件处理

使用方法

格式1:

f = open("文件名", "模式", encoding="utf-8")
# encoding是指定编码格式的

格式2:

with open("文件名","模式",encoding="utf-8") as f

格式1和格式2的区别是格式1需要用.close方法来关闭文件,而格式2使用完后,会自动关闭。

常用方法

f.readable():看是否有读权限。

f.read():读全部,read(数字)里面加数字表示读取的字符数

f.readline():读一行

f.readlines():每一行成为一个字符串,放到列表中。

f.write():写内容

f.writelines():将列表中内容写入。文件内容只能是字符串。

f.encoding():查看文件打开的编码,这个不能修改。

f.flush():将内容写到硬盘中。

f.tell():显示光标所在位置

f.seek():设置光标所在位置,由于seek是以字节为单位,如果设置之后在一个中文中,操作会显示错误

  f.seek(3,0):0模式,表示从文件开头开始算。默认

  f.seek(3,1):1模式,b模式打开,相对于 光标位置。

  f.seek(-10,2):2模式,倒着取第一个参数要是负数。

f.truncate(10):从开头开始算,将文件只保留0-10个字节。

注意:

1.read(3)代表读取三个字符,其余的文件内光标移动都是以字节为单位,比如:seek,tell,read,truncate

2.在不同编码中的换行有不用的格式,window是\r\n,Linux是\n,python会自动做一个操作,就是将换行都用\n来表示。如果要原来数据中的换行符号的话,在open参数中加入,newline=""

3.读文件的时候readlines()效率不高,要先将文件内容都读出来。for遍历的时候用文件名变量,比如for i in f。这个是要一行给一行。不浪费内存空间。 

4.读取文件最后一行:

for i in f:
    offs = -10
    while True:
        f.seek(offs, 2)
        data = f.readlines()
        if len(data) > 1:
            print("文件的最后一行是%s" % (data[-1].decode("utf-8")))
            break
        offs *= 2
View Code

模式

w:表示可写,如果文件不存在先创建文件,再写入数据,如果文件已存在,清空在写入

r:表示只读,读取数据文件必须存在,否则文件崩溃

a:表示追加数据,如果文件不存在,先创建文件,如果文件存在,在原有数据的后面追加写入数据。不支持读操作

 

r+:读取和写入,文件必须存在,在光标所在位置写,新加内容会覆盖原有内容。

w+:写入和读取,如果没有该文件,则创建,如果有该文件,先把原有数据清空再加入新值。可以用变量.seek(位置)将文件指针放到指定位置

a+:追加写入和读取数据,在文件内容后添加新值。

注意:指针完成写入之后,指针在末尾,再read是读不出来东西的,需要用seek将指针放到开头

 

wb:以字节方式写入数据,同w

rb:以字节方式读取数据,同r

ab:以字节方式追加写入数据,同a

用b模式操作的时候需要注意,不能用encoding指定编码

 

posted @ 2018-05-22 00:22  苦行僧95  阅读(244)  评论(0)    收藏  举报