文件IO常用操作
10年积累的网站制作、成都网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有商河免费网站建设让你可以放心的选择与我们合作。一般说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语句块执行完的时候,会自动关闭文件对象。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。