文件系统

1、文件操作

 

1.1 冯诺依曼体系结构(五大结构:输入输出设备、存储器、运算器、控制器)

  • CPU 由运算器和控制器组成:

1、运算器:完成各种算术运算、逻辑运算、数据传输等数据加工处理;

2、控制器:控制程序的执行;

3、存储器:用于记忆程序和数据;例如,内存。

4、输入设备:将数据或者程序输入到计算机中;例如,键盘、鼠标。

5、输出设备:将数据或者程序的处理结果展示给用户;例如,显示器。

 

扩展:(一般说 IO 操作,指的是文件 IO ,如果指的是网络 IO,都会直接说网络 IO ;数据落地指的是,将内存中的数据存储到本地磁盘中;)

 

1.2 文件 IO 常用操作

  1. open:打开
  2. read:读取
  3. write:写入
  4. close:关闭
  5. readine:行读取
  6. readines:多行读取
  7. seek:文件指针操作
  8. tell:指针位置

 

1.2.1 打开操作

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

file:文件 mode:模式 buffering:缓冲 encoding:编码 newline:换行符

file = Path(路径)打开一个文件,打开或者要创建的文件名,打开后返回一个文件对象(流对象)和文件描述;

 

  1. 文件使用完关闭;
  2. 文件操作中,最常用的操作就是读和写;
  3. 文件访问的模式有两种:文本模式(t)和 二进制模式(b);
  4. 不同模式下,操作函数不尽相同,表现的结果也不一样;

 

1.2.2 open的参数

  1. open 默认是只读模式 r 打开已经存在的文件。
  2. r :只读打开文件,如果使用 write 方法,会抛异常。如果文件不存在,抛出 FileNotFoundError 异常;
  3. w :表示只写方式打开,如果读取则抛出异常,如果文件不存在,则直接创建文件,如果文件存在,则清空文件内容;
  4. file:打开或者要创建的文件名。如果不指定路径,默认是当前路径;
  5. mode模式
  • r:缺省的,表示只读打开
  • w:只写打开(创建空白纸)
  • x:创建并写入一个新文件,如果文件以存在则抛异常;(只会创建新文件,也就是不存在的文件)FileExistsError 文件已存在
  • a:写入打开,如果文件存在,则追加( append )
  • b:二进制模式
  • t:缺省的,文本模式
  • +:读写打开文件。给原来只读,只写方式打开提供缺失的读或者写能力;

 

w、x、a 都是只写模式的;如果文件不存在,则生成新的文件;

w 不论文件存在与否都会生成全新文件内容;

a 不管文件是否存在,都能在打开的文件尾部追加;

x 必须要求文件不存在,自己造一个新文件;

+ 为 r、w、a、x 提供缺失的读或写功能,但是,获取文件对象依旧按照 r、w、a、x 自己特征。+ 不能单独使用,可以认为它是为前面的模式字符做增强功能的。

 

1.3 文本模式(t)和 二进制模式(d)

  1. 文本模式 t 字符流:将文件的字节按照某种字符编码理解,按照字符操作。open 的默认mode就是 rt ;
  2. 二进制模式 b 字节流:见文件就按照字节理解,与字符编码无关。二进制模式操作时,字节操作使用 bytes 类型;
  3. Linux 默认编码是 UTF-8 ,Windows 默认编码是 gbk;(utf-8 汉字占三个字节,gbk 汉字占两个字节)
  4. + 为 r、w、a、x 提供缺失的读或写功能,但是,获取文件对象依旧按照 r、w、a、x 自己的特征。+ 不能单独使用,可以认为他是为前面的模式字符做增强功能的。

 

2、 文件指针

文件指针,指向当前字节位置

  1. tell():显示指针当前位置;
  2. seek(offset [,whence ]):移动文件指针位置。offset偏移多少字节,whence从哪里开始(whence只有0:起始,1:当前,2:末尾 三个数字);
  3. 文本模式下当 whence 0 缺省值,表示从头开始,offest 只能正整数, whence 1 表示从当前位置,offest 只接受 0 whence 2 表示从 EOF 开始,offest 只接受 0 .
  4. 特别注意:文本模式 和 二进制模式情况不同;
  5. 二进制模式下 whence 0 缺省值,表示从头开始,offest 只能正整数 whence 1 表示从当前位置,offest 可正可负,whence 2 表示从EOF开始,offest 可正可负;
  6. 二进制模式支持任意起点的偏移,从头、从尾、从中间位置开始。向后seek可以超界,但是向前seek的时候,二进制模式 和 文本模式都不能超界,否则抛异常;
 

文本模式

二进制模式

whence 0:头

offest 只能正整数

offest 只能正整数

whence 1:当前

offest 只接受0

fooest 可正可负

whence 2:尾

offest 只接受0

fooest 可正可负

 

3、buffering:缓冲区

-1 表示使用缺省值大小的buffer。如果是二进制模式,使用 io.DEFAULT_BUFFER_SIZE 值(缺省缓冲区大小,字节),默认是4096 或者 8192.如果是文本模式,如果是终端设备,是行缓存方式,如果不是,则使用二进制模式的策略。

  • 0 只在二进制模式使用,表示 关buffer
  • 1 只在文本模式使用,表示使用行缓冲。意思就是见到换行符就 flush
  • 大于 1 用于指定buffer的大小,一般不指定,使用默认值;
  • buffer 缓冲区一个内存空间,一般来说是一个 FIFO 队列,到缓冲区满了或者达到阈值,数据才会 flush 到磁盘。
  • flush() 将缓冲区数据写入磁盘 ,close() 关闭前会调用 flush()
  • buffering = 0 ,这是一种特殊的二进制模式,不需要内存的 buffer,可以看做是一个 FIFO 的文件;

 

buffering

说明

buffering = -1

t 和 b,都是 io.DEFAULT_BUFFER_SIZE

buffering = 0

b 关闭缓冲区

t 不支持

buffering = 1

b 就1个字节

t 行缓冲,遇到换行符才 flush

buffering > 1

b 模式表示行缓冲大小。缓冲区的值可以超过 io.DEFAULT_BUFFER_SIZE,直到设定的值超出后才把缓冲区flush

t 模式,是 io.DEFAULT_BUFFER_SIZE字节,flush完后把当前字符串也写入磁盘;

  1. 文本模式,一般都用默认缓冲区大小;
  2. 二进制模式,是一个个字节的操作,可指定buffer的大小;
  3. 一般来说,默认缓冲区大小是个比较好的选择,除非明确知道,否则不调整它;
  4. 一般编程中,明确知道需要写入磁盘了,都会手动调用一次 flush,而不是等到自动 flush 或者 close 的时候;

 

4、encoding:编码,仅文本模式使用

None 表示使用缺省编码,依赖操作系统。 windows 默认的是gbk编码、linux 默认是utf-8编码;

 

5、其他参数

  1. errors 什么样的编码错误将被捕获 None 和 stric 表示有编码错误将抛出 ValueError 异常;ignore 表示忽略;
  2. newline 文本模式中,换行的转换。可以为 None、“ ”空串、’ \r '、' \n '、' \r\n ' 读时
    1. None表示 ’ \r '、' \n '、' \r\n ' 都被转换为 ’ \n ‘ ;
    2. “ ” 空串表示不会自动转换通用换行符;
    3. 其他合法字符表示换行符就是指定字符,就会按照指定字符分行写
  3. closefd 关闭文件描述符。True 表示关闭它,False 会在文件关闭后保持这个描述符。fileobj.fileno()查看;
  4. read( size= -1 ):size表示读取的多少字符或字节;负数或者None表示读取到EOF;
  5. readline( size=-1 ):一行行读取文件内容。size设置一次能读取行内几个字节 或 字符;
  6. readlines( hint=-1 ):读取所有行的列表。指定 hint 则返回指定的行数;
  7. write(s),把字符串s写入到文件中并返回字符的个数 writelines(lines),将字符串列表写入文件;
  8. close :flush 并关闭文件对象。文件已经关闭,再次关闭没有任何效果;

名称

说明

seekable()

是否可seek

readable()

是否可读

writeable()

是否可写

closeable()

是否已经关闭

 

6、with...as:上下文管理(一种特殊的语法,交给解释器去释放文件对象)

try: finally: 块异常处理;

上下文管理:

  1. 使用 with...as 关键字;
  2. 上下文管理的语句块并不会开启新的作用域;
  3. with 语句块执行完的时候,会自动关闭文件对象;
  4. 另一种写法:eg:f1 = open( 'test' )

with f1:

f1.write(" abc ")

 

  • 对于类似于文件对象的 IO 对象,一般来说都需要在不使用的时候关闭、注销,以释放资源;
  • IO 被打开的时候,会获得一个文件描述符。
  • 计算机资源是有限的,所以操作系统都会做限制。就是为了保护计算机的资源不要被完全耗尽,计算机资源是共享的,不是独占的;
  • 一般情况下,除非特别明确的知道资源情况,否则不要提高资源的限制来解决问题;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值