博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python —— I/O
阅读量:6985 次
发布时间:2019-06-27

本文共 4380 字,大约阅读时间需要 14 分钟。

CPU构成:	运算器:完成各种算数运算、逻辑运算、数据传输等数据加工处理	控制器:控制程序的执行	存储器:用于记忆程序和数据,例如内存	输入设备:将数据或者程序输入到计算机中,例如:键鼠	输出设备:将数据或者程序处理结果展示给用户 例如:显示器、打印机等	一般I/O操作,指的是文件IO,若是网络IO会直接称呼网络IO文件IO常用操作:	Open :打开	Read :读取	write:写入	close:关闭readline: 行读取readlines:多行读取seek:文件指针操作tell:指针位置open(file, mode=’r’, buffering = -1, encoding= None, errors = None, newline = None, closefd = Ture, opener = None)打开一个文件,返回一个文件(流)对象和文件描述符。打开文件失败则返回异常F = open(‘test’) #file对象  -> 打开test文件f.read() 读文件f.close() 关闭文件文件的访问模式有两种: 文本模式和二进制模式不同模式下,操作函数不尽相同,表现的结果也不一样Open参数:file:	打开或者要创建的文件名,如果不指定路径,默认当前工作路径(相对路径)Mode —> 模式:#r 模式-> 可读不可写f = open('test') f.read()f.write('abc')#不可写f.close()f = open('test', 'r')#使用r 只读方式 不可写f.write('abc')f.close()#打开一个不存在的文件 报错f = open('test1', 'r') #w 模式f = open('test', 'w')f.write('ccc')f.close()>>>cat test>>> ccc#在使用一次写入功能 直接覆盖test为空f = open('test', mode = 'w')f.close()>>> cat test>>>#w 可以直接新建个test1 写入'123'f = open('test1', mode='w')f.write('123')f.close()>>>cat test1>>>123%open默认是只读模式r打开已经存在的文件。r:	只读打开文件,如果使用write方法,抛异常	如果文件不存在,抛FileNotFoundError异常w:	只写方式打开,读取则抛异常	文件不存在,可以直接创建文件	如果文件存在,清空文件内容-----------------------------------------------x:	文件不存在,创建文件,只可写入	文件存在,抛出FileExistsError异常f = open('test2', 'x')f.read()f.write('abcd')f.close()>>>cat test2>>>abcdf = open('test2', 'x')a:	文件存在,可写可打开,追加内容	文件不存在,则创建后,可写可打开,追加内容f = open('test3', 'a')f.read()f.write('zzzzzzz')f.close()>>cat test3>>>zzzzzzzf = open('test4', 'a')f.wirte('test4')f.close()>>>cat test4>>>test4总结:	r是只读,wxa都是只写	wxa都可以产生新文件。	w不管文件存在与否,都会生成全新内容的文件	a不管文件是否存在,都能在打开的文件尾部追加内容	x必须要求文件事先不存在,自己创建一个新文件文本模式 t:	字符流,将文件的字节按照某种字符编码理解,按照字符操作。open默认mode是rt二进制模式 b:	字节流,将文件按照字节理解,与字符编码无关。二进制模式操作时,字节操作使用bytes类型f = open('test', 'wb')f.write('abc测试'.encode())f.close()f = open('test')f.read(3)>>>bc测f.read(1)>>>af.close()f = open('test', 'rb')f.read(1)>>>'a'f.read(3)>>>'bc\xe6'f.close()--------------------------------------------------f = open('test', 'r+')f.write('abc123')f.read()f.close()f = open('test', 'w+')f.write('abc123')f.read()f.close()f = open('test', 'a+')f.write('abc123')f.read()f.close()f = open('test2', 'x+')f.write('abc123')f.read()f.close()以上f.read都为空,但是cat可以显示内容+:	为r/w/a/x 提供缺失的读写功能(缺读给读,缺写给写),但是,获取文件对象依旧按照r/w/a/x自己的特征。+ 不能单独使用,可以认为它是为前面的模式字符做增强功能的。文件指针:	指向当前字节位置	mode = r  指针起始在0	mode = a  指针起始在EOF(文件末尾)	tell() 显示指针当前位置	seek(offset[,whence])	移动文件指针位置。offset 偏移x个字节文本模式下:	whence 0 缺省值,表示从头开始,offset只能正整数	whence 1 表示从当前位置开始, offset 只接受0	whence 2 表示从EOF开始,offset只接受0test4 = ('test4')	f = open('test4', 'r+')	f.tell() #起始  0	f.read() #'test4'	f.tell() # EOF  5	f.seek(0)# 0	f.read() # test4	f.seek(2,0) # 2	f.read()	#st4	f.seek(2,0) #st4	f.seek(2,1) #Error offset 只能为0	f.seek(2,2)	#Error offset 只能为0	f.close()中文	f = open('test4', 'w+')	f.write('测试')	f.tell() #6	f.close()	f = open('test4', 'r+')	f.read(3)#'测试'	f.seek(1)#1	f.tell()#1	f.read()#Error	f.seek(2)#2	f.close()文本模式支持从开头向后偏移的方式二进制模式:	whence 0 缺省值,表示从头开始,offset只能正整数	whence 1 表示从当前位置开始,offset可正负	whence 2 表示从EOF开始,offset可正负f = open('test4', 'rb+')f.tell() #0f.read()#b'\xe6\xb5\x8b\xe8\xaf\x95'f.tell() #6f.write(b'abc')f.seek(0)#0f.seek(2,1)#2f.read()#b'\x8b\xe8\xaf\x95abc'f.seek(-2,1)#7f.seek(2,2)#9f.seek(0)#0f.seek(-2,2)#f.read()#'bc'f.seek(-20,2)#Error  Invaild argumentf.close()buffering:缓冲区     -1 表示使缺省值大小的buffer,如果是而精致模式,使用io.defaults_buffer_size值,默认是4096或者8192如果是文本模式,如果是终端设备,是行缓存方式,如果不是则使用二进制的策略  0只在二进制模式使用,表示管buffer  1只在文本模式使用,表示使用行缓冲,意思就是见到换行符flush  大于1 用于指定buffer的大小buffer缓冲区: 	缓冲一个内存空间,一般来说是一个FIFO队列,到缓冲区满了或者达到阈值,数据才会flush到磁盘flush()  将缓冲区数据写入磁盘close()	 关闭前会调用flush()io.DEFAULT_BUFFER_SIZE 缺省缓冲区大小,字节>>>import io>>>io.DEFAULT_BUFFER_SIZE>>>8192buffering = -1  t和b,都是io.DEFAULT_BUFFER_SIZEbuffering = 0	b 关闭缓冲区,t不支持buffering = 1	b 就一个字节,t行缓冲,遇到换行符才flushbuffering > 1		b模式表示缓冲大小。缓冲区的值可以超过io.DEFAULT_BUFFER_SIZE,直到设定的值超出后才把缓冲区flush。	t模式,是io.DEFAULT_BUFFER_SIZE,flush完成后把当前字符串也写入磁盘总结:	1、文本模式,一般都用默认缓冲区大小	2、二进制模式,是一个个字节的操作,可以指定buffer的大小	3、默认缓冲区大小是个比较好的选择,除非明确的知道,否则不调整	4、明确知道需要写磁盘,都会手动调用一次flush,而不是等到自动flush或者close的时候上下文管理:ulimit -a查看所有限制,其中open files就是打开文件数的限制,默认1024异常处理:当出现异常的时候,拦截异常,但是因为很多代码都可能出现oserror异常,不好判断异常,是因为资源限制产生的f = open('test')try:     f.write('abc')     #文件只读,写入失败finally:     f.close()     #正确做法使用finally可以保证打开的文件可以被关闭上下文管理,一种特殊的语法,交给解释器取释放文件对象使用with...as关键字上下文管理的语句块并不会开启新的作用域with语句块执行完的时候,会自动关闭文件对象def fwith open('test')as f:     f.write('hello')     #文件只读,写入失败f.closed(测试f是否关闭)

  

转载于:https://www.cnblogs.com/hkcs/p/7731673.html

你可能感兴趣的文章
稳健的漫步~~~
查看>>
取得NSDate实例各个字段的数字
查看>>
Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?
查看>>
使用BootStrapValidator来完成前端输入验证
查看>>
NFS客户端、服务器协商读写粒度(rsize、wsize)流程 【转】
查看>>
远程转发
查看>>
消极状态集
查看>>
hadoop 学习笔记:mapreduce框架详解
查看>>
S5PV210 FirstAndroidAPP] ERROR: Application requires API version 版本不对的问题
查看>>
css动画总结
查看>>
搭建Python+Eclipse开发环境
查看>>
了解计算机指令和汇编指令
查看>>
java处理高并发高负载类网站的优化方法
查看>>
【HDOJ】1196 Lowest Bit
查看>>
动软Model 模板 生成可空类型字段
查看>>
jQuery.parseJSON()函数详解
查看>>
使用Nexus配置Maven私有仓库
查看>>
洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
查看>>
Ionic(ionicframework)一款接近原生的Html5移动App开发框架 中文网
查看>>
[Android Pro] Android 6.0 Root
查看>>