文件IO经常使用操做:python
open | 打开 |
read | 读取 |
write | 写入 |
close | 关闭 |
readline | 行读取 |
readlines | 多行读取 |
seek |
文件指针操做 |
tell | 指针位置 |
打开操做:
windows
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)缓存
打开一个文件,返回一个文件对象(流对象)和文件描述符。打开文件失败,则返回异常。
ide
标红的字,为最经常使用到的四个。编码
基本使用:spa
open的参数:操作系统
file: 认识开可者要建立的文件名。若是不指定路径,默认是当前路径。指针
mode模式:对象
描述字符 | 意义 |
r | 缺省的,表示只读打开 |
w | 只写打开 |
x | 建立并写入一个新文件 |
a | 写入打开,若是文件存在,则追加 |
b | 二进制模式 |
t | 缺省的,文本模式 |
+ | 读写打开一个文件。给原来只读、只写方式打开提供缺失的读或写能力 |
open默认是只读模式r打开已经存在的文件。队列
r
只读打开文件,若是使用write方法,会抛异常。
若是文件不存在,抛出FileNotFoundError异常。
w
表示只写方式打开,若是读取则抛出异常;
若是文件不存在,则直接建立文件;
若是文件存在,则清空文件内容;
x
文件不存在,建立文件,并只写方式打开;
文件存在,抛出FileExistsError异常;
a
文件存在,只写打开,追加内容;
文件不存在,则建立后,只写打开,追加内容;
r是只读,wxa都是只写
wxa均可以产生新文件,w无论文件存在与否,都会生成全新内容的文件;a无论文件是否存在,都能在打开的文件
尾部追加;x必需要求文件事先不存在,本身造一个新文件;
文本模式t
字符流,将文件的字节按照某种字符编码理解,按照字符操做。open的默认mode就是rt;
二进制模式b
字节流,将文件就按照字节理解,与字符编码无关。二进制模式操做时,字节操做使用bytes类型.
+
为r、w、a、x提供缺失的读写功能,可是,获取文件对象依旧按照r、w、a、x本身的特征。
+不能单独使用,能够认为它是为前面的模式字符作加强功能的。
文件指针
文件指针,指向当前字节位置
mode=r,指针起始在0
mode=a, 指针起始在EOF
tell()显示指针当前位置
seek(offset[,whence]),移动文件指针位置,offset偏移多少字节。whence从哪里开始。
文本模式下:
whence 0缺省值,表示从头开始,offset只能正整数。
whence 1表示从当前位置,offset只接受0
whence 2表示从EOF开始,offset只接受0
二进制模式下:
whence 0缺省值,表示从头开始,offset只能正整数
whence 1表示从当前位置,offset可正可负
whence 2表示从EOF开始,offset可正可负
二进制模式支持任意起点的偏移,从头,从尾,从中间位置开始。
向后seek能够超界,可是向前seek的时候,不能超界,不然抛出异常。
buffering: 缓冲区
-1表示使用缺省大小的buffer。若是是二进制模式,使用io.DEFAULT_BUFFER_SIZE值,默认是4096或8192。
若是是文本模式,若是是终端设备,是行缓存方式,若是不是,则使用二进制模式的策略。
0 只在二进制模式使用,表示关buffer
1 只在文本模式使用,表示使用行缓冲。意思是见到换行符就flush
大于1用于指定buffer的大小
buffer缓冲区
缓冲区一个内存空间,通常来讲是一个FIFO队列,到缓冲区满了或者达到阈值,数据才会flush到磁盘。
flush() 将缓冲区数据写入磁盘(实际上是磁盘的缓冲区);
close()关闭前会调用flush()
import io print(io.DEFAULT_BUFFER_SIZE)
encoding: 编码,仅文本模式使用
None 表示使用缺省编码,依赖操做系统。
windows下缺省GBK(0xB0A1),Linux下缺省UTF-8(0xE5958A)
其它参数:
errors: 什么样的编码错误将被捕获;
None和strict表示有编码错误将抛出ValueError异常;ignore表示忽略;
newline: 文本模式中,将行的转换。能够为None, " \r \n \r\n
读时,None表示\r \n \r\n都被转换为\n;
"表示不会自动转换通用换行符;
其它合法字符表示换行符就是指定字符,就会按照指定字符分行;
写时,none表示\n都会被替换为系统缺省分隔符os.linesep;
\n或"表示\n不替换;
其它合法字符表示\n会被替换为指定的字符;
closed: 关闭文件描述符,True表示关闭它,False会在文件关闭后保持这个描述符;
fileobj.fileno()查看.