标签:智能 filesyste 注意 tde l命令 read import cti 自动
该部分主要包含文件和目录相关工具,里面包含迭代、上下文管理、以及文件对象对unicode编码的支持。
python内建函数,用来在计算机底层系统下访问文件的主要工具。
		  (1)被调用时将返回一个新的与外部相连的文件对象。
		  (2)具备文件双向传输数据的方法,及执行多种文件相关操作。
		  (3)为底层文件系统提供了可移植接口,可在多种平台上正常运行。
			(1)内容包含unicode文本序列
			(2)文件进行双向传输时,自动按照默认的编码进行转换,换行符自动转换
			(3)创建文件时使用那个str对象
			(1)内容包含bytes序列
			(2)文件进行双向传输时,不进行任何转换
			(3)创建对象时使用bytes对象
		read,readline	   	#读取数据,注意打开文件的模式				
		write,writelines	  #写入数据,writelines列表对象输入
		close	      			#释放系统资源,可使用with环境语句
		seek        				#移动到文件的任意位置
		flush	       			#缓存区数据刷新到磁盘
		fileno	      			#获取底层文件句柄
文件对象包含一个智能的迭代器,能够在for循环和列表解析等所有迭代环境下,在每次请求的情况下返回一行。
		文件名
			  文件路径可以是一个绝对路径或相对于当前目录的路径
		打开模式
			  r+,w+,a+		#文本模式下读写
			  rb,wb			#二进制模式下读写
		缓存策略
			  指定缓冲策略,以便提高性能,因为linux以page页为单位,可设置open的buffer缓冲区大小减少系统IO调用。
文本文件内容
在文件内部是编码之后的形式,内存中则是解码(unicode序列)之后的形式。
			  文本模式	\r\n --> \n
			  文本模式	\n   --> \r\n
			  二进制模式  不发生转换,二进制模式可以避免unicode错误,同时也自动禁用了换行符转换。
			  python2.x中文件会存在bytes和unicode两种类型的数据,读取时需要注意打开文件的模式。
			  python3.x中文件只存在bytes一种数据类型,读取时可采用二进制通用的读取方法。
	
可用于打包和解压二进制数据,二进制数据的内容相对来说内容比较丰富,会包含各种数据类型,如整数,浮点数,字符等。
		用途:
			  如果需要使用一些持久化的数据结构文件来进行程序之间通信的话,struct会是一种比较好的选择,通常程序之间可采用xml这种文本格式来储存交换数据,
			  又或者采用json这种通用的序列化工具,相对来说struct在一些简单的应用场景中,会显得比较简单高效些。
		读取和存储
			  读取:采用二进制读取字节字符串
			  存储:采用二进制的方式存储字节串
		示例
			import struct
			file = open(‘data.bin‘, ‘rb‘)
			bytes = file.read()
			values = struct.unpack(‘>i4shf‘, data)
			values[3:4]
			struct.unpack(‘>h‘, values)
二进制文件的随机访问
			1、二进制文件也可以进行常见的随机访问处理操作,使用seek移动到文件的任意内部位置。
			2、seek支持基于字节偏移的随机访问
			3、文本模式下不同的编码,会导致使用seek比较困难,这会涉及文本内容编解码和换行符转换问题从而导致错误。当文件数据中存在unicode和非unicode
数据共存的时候,通过seek操作之后,可能导致后续的read操作出现异常,如定位到unicode编码字节的中间字节上,从而导致解码错误。
	os模块中的底层文件工具
		  os调用是通过文件描述符来处理文件,基于文件描述符的文件以原始字节形式进行处理。
		os.open的使用
			  file = open(‘file_path‘, ‘‘r)
			  file.fileno()	  #获取文件描述符
		    os.open的模式标识符
			      os模块让脚本运行有更加精细的控制
		    把描述符封装进文件对象
			      利用os.fdopen()函数传入文件描述符参数,继而操作文件。
		    其他os文件模块工具
			重命名文件
			删除文件
			修改文件权限
			....
		    可利用文件对象的read等一系列方法来逐行读取文件内容,同时也可以利用for,map等迭代工具来扫描文件。
			      def scanner():
				        list(map(function, open(name, ‘r‘)))
				        #[ function(line) for line in  open(name, ‘r‘) ]
		    文件过滤器
			      def filter_files(name, function):
				        with open(name, ‘r‘) as input, open(name + ‘.out‘, ‘w‘) as output:
					        for line in input:
						          output.write(function(line))
    用os.popen执行shell命令
			      #非迭代器用法,阻塞式
			      os.popen(‘dir /b‘).readlines()
	
			      #迭代器用法,非阻塞式,逐行进行读取输出
			      for line in os.popen(‘dir /b‘):
				        print(line[:-1])
该调用没有涉及派生shell命令,可用于在多个目录下收集匹配名称。
可以通过编写递归程序来遍历目录树,也可以使用os模块内建的工具,如os.walk。
    有条件的不断执行自我嵌套的函数,表征为:
		    (1)包含判断逻辑
		    (2)包含循环处理逻辑
		    通过os.listdir,os.walk等模块生成的都是unicode字符串,那么这可能会遇到解码错误的问题,这时候可以
		    选择将os.listdir以bytes参数的方式指定运行,那么函数将以编码好的直接字符串形式返回文件名。
		    与文件相关的unicode概念有两种完全不同的形式,文件内容编码和文件名编码。
		    文件内容编码取决于python解释器环境的设置,文件名编码取决于系统环境的设置。
			      sys.getdefaultencoding()		#文件	
			      sys.getfilesystemencoding()		#文件名
重点小结:
1、不同类型文件的打开模式
2、文件编解码
3、struct模块的用法,打包和处理二进制文件的数据。
标签:智能 filesyste 注意 tde l命令 read import cti 自动
原文地址:https://www.cnblogs.com/solitarywares/p/10202522.html