文件对象
文件对象不仅可以访问普通的磁盘文件,也可以访问任何其他类型抽象层面的“文件”。文件只是连续的字节序列,数据的传输经常用到字节流。
1、文件内建函数(open()和file())
file_object = open(file_name,access_mode='r',buffering=-1)
- file_name是包含要打开的文件名字的字符串,可以是相对路径,也可以是绝对路径。
- acceess_mode 也是字符串,代表文件打开的模式。
- 参数简介:’r’代表读取;’w’ 代表写入,该模式下打开的文件若存在则首先清空,然后 重新创建;’a’代表追加,所有追加的数据放在末尾;‘U’代表通用换行符。
- C库函数fopen()中使用的模式也可以在python的open()下使用。包括’+’代表可读可写,’b’代表二进制模式访问。
- buffering用于指示访问文件所采用的缓冲方式。其中0表示不缓冲,1表示只缓冲一行数据,任何大于1的值代表给定值作为缓冲大小。不提供参数或者给定负值代表使用系统默认的缓冲机制。
文件对象的访问模式
文件模式 |
操作 |
r |
以读的方式 |
rU或 Ua |
以读方式打开,同时提供通用换行符 |
w |
以写的方式打开(必要时清空) |
a |
以追加的模式打开(从EOF开始,必要时创建新文件) |
r+ |
以读写的方式打开 |
w+ |
以读写的方式打开(参见w) |
a+ |
以读写的模式打开(参见a) |
rb |
以二进制读模式打开 |
wb |
以二进制写模式打开(参见w) |
ab |
以二进制追加模式打开(参见a) |
rb+ |
以二进制读写模式打开(参见r+) |
wb+ |
以二进制读写模式打开(参见w+) |
ab+ |
以二进制读写模式打开(参见a+) |
1.1工厂函数file()
open()和file()函数具有相同的功能,可以任意替换,建议用open()函数来读写文件,在你想说明您在处理文件对象时使用file(),例如
if instance(f,file)
1.2通用换行支持(UNS)
- 不同平台用来表示结束的的符号是不同的,例如\n,\r,或者\r\n.
- UNS(Universal NEWLINE Support)用相同的方式处理所有不同平台的文件。
- 所有的行分隔符通过python的输入方法(例如read())返回时都会被替换成换行符NEWLINE(\n)。文件对象的newlines属性会记住它曾”看到的”文件的行结束符。
- 如果文件打开,没有遇到行结束符,那么文件的newlines为None。第一行被读取后,newlines被设置为第一行的结束符。如果遇到其他类型的行结束符,文件的newlines属性会成为一个包含每种格式的元组。
- UNS只用于读取文件,没有对应的处理文件输出的方法。
- 编译python时自动打开,可手动关闭
2、文件内建方法
包括四类:输入、输出、文件内移动及杂项操作。
2.1输入
- read()
直接读取字节到字符串,最多读取给定数目个字节。没给出,则读取到文件末尾。未来版本可能会被删除
- readline()
读取文件方式打开文件的一行,整行包括行结束符,作为字符串返回。给出size参数,默认-1,代表行结束符。
- readlines()
读取所有行然后把他们作为一个字符串列表返回。可选参数sizhint代表字节大小,如果大于0,那么返回所有航应该大约sizhint个字节(可能稍微大于这个数字,因为需要凑齐缓冲区大小)
- xreadlines()
高效迭代文件的行。file.xreadlines()等价与xreadlines.xreadlines(file)。xreadlines()不是一次性读取所有的行到内存中,而是每次读取一块,所有使用for循环有效减少内存的占用。随着文件迭代的使用,没有必要使用xreadlines()方法,因为他和iter(file)的效果是一样的;在for循环中使用for eachline in file代替他。
2.2输出
- write()
该内建函数将文本数据或者二进制数据块的字符串读入到文件中去
- writelines()
- 针对列表的操作,它接受一个字符串列表作为参数,将他们写入文件
- 行结束符不会自动加入,需要手动添加
[核心笔记]
当使用输入方法如read或readlines()从文件中读取行时,python并不会删除行结束符,这个删除行的操作需程序员自己完成,如下:
f = open('myfile','r')
data = [line.strip() for line in f]
f.close()
2.3文件内移动
- seek()
可以在文件中移动文件指针到不同的位置。offset代表字节代表相对于某个位置偏移量。位置的默认值为0,代表文件从开头算起,1代表从当前位置算起,2代表从末尾算起。
- text()
告诉你当前文件指针在文件中的位置-从开始起算起,单位为字节。