文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python文件IO操作

2023-01-31 01:05

关注

文件IO常用操作:

open打开
read读取
write写入
close关闭
readline行读取
readlines多行读取
seek
文件指针操作
tell指针位置

打开操作:


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

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

标红的字,为最常用到的四个。


基本使用:

  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()查看.


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯