Python——文件IO常用操作

文件IO常用操作

一般说IO操作,指的是文件IO;如果是网络IO,都会直接说网络 IO

open 打开操作

open(file, mode = "r" , buffering = -1 , encoding = None , errors = None , newline = None,closefd = True , opener = None)

1.打开一个文件,返回一个文件对象(流对象)和文件描述符。打开文件失败,则返回异常

2.基本使用:创建一个文件test ,然后打开它,用完关闭

文件操作中,最常用的操作就是读和写。

文件访问的模式有两种:

    1.文本模式 t

    2.二进制模式 b

不同模式下,操作函数不尽相同,表现的结果也不一样

注意:windows中使用 copypage代码页,可以认为每一个代码页就是一张编码表。cp936 => GBK

open函数的参数

file:

打开 或者要创建的文件名。如果路径不存在。默认是当前路劲

mode 模式 缺省值  "r"

"r" 只读打开文件

- 如果使用write方法会抛 异常

- 如果文件不存在,抛出 FileNotFoundError异常

"w" 表示只写方式打开

- 如果 read 则抛出异常

- 如果文件不存在,则直接创建新空白文件

- 如果文件存在,则清空文件内容

"x"表示只写方式打开

- 如果文件不存在,创建文件,并只写方式打开

- 如果文件存在,抛出 FileExistError异常

"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 = 0]):移动文件指针位置

seek是按照字节偏移的

offest 偏移多少字节

whence 从哪里开始(0,1,2 => 首,相对现在位置,尾)

1.字符流:whence  = 1,2    offest只能 = 0

  whence  = 0 offest >= 0

. 2.字节流:   whence = 1,2 offest  可正可负,不能超左边界

whence = 0 offest >= 0


buffering 缓冲区

-1 表示使用缺省大小的buffer。

如果是二进制模式,使用io.EDFAULT_BUFFER_SIZE值,默认是4096 或者 8192

如果是文本模式,如果是终端设备,

seek()调用会引起flush()

buffer 缓冲区

缓冲一个内存空间,一般来说是一个 FIFO队列,当缓冲区满了或者达到阈值,数据才会flush到次磁盘

flush()将缓冲区数据写入磁盘,close()关闭前会调用flush(),seek()调用会引起flush()

io.EDFAULT_BUFFER_SIZE缺省穿冲区大小(4096,8192)

enconding : 编码,仅文本模式使用

None表示使用缺省编码,依赖操作系统。windows 下缺省 GBK(0xB0A1),Linux 下缺省 UTF-8(0xE5 95 8A)

最好不用缺省,同意带上utf-8


其它参数

errors

什么样的编码错误将被捕获, None和strict 表示有编码错误将抛出 valueError异常,ignore表示忽略

newline

文本模式中,换行的转换。可以为None、" "空串、"\r"、"\n"、"\r\n"

closedfd关闭文件描述符,True表示关闭它。False 会在文件关闭是保留它。

fileobjt.fileno()

0,标准输入

1,标准输出

2,标准错误输出

read

read(size=-1)

size 表示读取的多少个字符或者字节;负数或者None表示读取到EOF

readline(size=-1)

一行行读取文件内容。size设置一次能读取行内几个字符或者字节。

readlines(hint=-1) ->返回所有行的列表

读取所有行的列表。指定hint则返回指定的行数

# 按行迭代

f = open("test") #返回可迭代对象

for line in f:

print(line)

f.close

write

write(s),把字符串s写入到文件中并返回字符的个数

writelines(lines),将字符串列表写入文件,lines 要元素是字符串的列表

close

flush 并关闭文件对象

文件已经关闭,再次关闭没有任何效果

其它

seekable() 是否可以seek

readable() 是否可读

writeable() 是否可写

closed 是否已经关闭

上下文管理

1.使用with ... as : 关键字

2.上下文管理的语句块并不会开启新的作用域

3.with语句块执行完的时候,会自动关闭文件对象。


猜你喜欢

转载自blog.51cto.com/13886191/2172658
今日推荐