zoukankan      html  css  js  c++  java
  • Python文件处理

    文件操作分为读、写、修改。

    一、读取文件。
    
    	f = open(file="D:/文件/p1.txt",mode='r',encoding='utf-8')
    				  绝对路径。
    				  
    	f = open(file = "p1.txt", mode='r', encoding='utf-8') 
    	打开   文档 =  路径(文档名称)方式可读  解码:存文件时候的编码
    	data = f.read()       读取f的内容存一个变量叫data。
    	print(data)    打印。
    	f.close()      结束程序。
    	注:f.read(1)  #读取返回文件内字符1的内容。按字符返回。
    
    二、二进制模式:
    	f = open(file='p.txt',mode='rb')    #一般用于网络传输。
    	打开   路径        以二进制读到p.txt    r,文本只读模式, b:二进制
           
    三、智能检测编码的工具:在不知道编码的情况下使用。
    	1、首先安装第三方工具箱:pip:python第三方工具包。   chardet 
    	2、f = open(file='p.txt',mode='rb')
    		 #打开   路径        以二进制读到p.txt    r,文本只读模式, b:二进制
    	3、import chardet
    	f = open('p.txt',mode='rb')  #以rb模式打开
    	data = f.read()    #存入变量data,以read模式。
    	f.close()     #结束写代码。
    
    	4、chardet.detect(data)  #查看字符编码是什么。查出来是gbk2312
    	5、data.decode('gbk2312')  #解码成gbk2312
    
    四、写模式操作文件:读一点文件处理一点,避免大文件占用内存。
    	循环文件:文件内的字符串还自动出现换行键。Print本身就会换行。
    	f = open('p.txt',mode='rb',encoding='gbk')   
    	for line in f:    #循环f这个文件,每次取一行来处理。
    		print(line)
    	f.close()
    	写文件:w:创建。  或者wb,b二进制。
    	f = open(file='p6.txt',mode='wb',encoding='utf-8')    #以二进制模式写进文件。
    	f.write('张三25,手机号:1336856248') #w创建一个新文件,会将以前的文件清空。
    	注:write的时候文件是临时存在内存buffer里。当buffer满了,或者close结束写代码的时候才会存硬盘上。
    	f.close()     结束写代码。
    
    五、追加模式操作文件:   把文件追加到文件尾部。
    	f = open(file='p6.txt',mode='ab',encoding='utf-8')    #a 插入。默认插入到尾部。
    	f.write('
    张三25,手机号:1123654248')     #
     换行插入。
    	f.close()    结束代码。
    
    六、混合操作文件。
    	读写模式:‘r+’ 先读后写,支持往后追加。
    	f = open(file='cld.txt',mode='r+',encoding='utf-8')
    	data = f.read()
    	f.write('
    张三,手机:')
    	f.write('
    李四,手机:1234567')
    	f.close()
    
    	写读模式:’w+’   以写的模式打开,就是以创建的形式。支持读,支持读前面写进去的内容。
    	f = open(file='cld.txt',mode='w+',encoding='utf-8')
    	data = f.read()
    	f.write('
    王五,手机:12345678912')
    	f.write('
    赵六,手机:1234567')
    	f.close()
    
    七、文件操作其它功能:
    
    	def fileno(self,*args,**kwargs): #real signature unknown
    		#返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到。
    	def flush(self, *args, **kwargs): #real signature unknown
    		#把文件从内存buffer里强制刷新到硬盘。#buffer的大小可以调整。
    		示例:f = open(file='p6.txt',mode='w',encoding='utf-8')    
    			  f.write('张三25,手机号:1336856248') 
    	       注:write的时候文件是临时存在内存buffer里。当close结束写代码的时候才会存硬盘上。
    	          f.flush( )    #强制将write临时存在内存的文件,强制存进硬盘。
    
    	def readable(self,*args,**kwargs):  #real signature unknown
    		#判断是否可读。判断的是linux下的特殊文件。也可以判断文件。
    	def readline(self,*args,**kwargs):   #real signature unknown
    		#只读一行,遇到
     or 
     为止。  
    		单行读,有换行的位置终止,读到哪一行光标就在哪一行。
     
    	def seek(self, *args, **kwargs):  # real signature unknown 
    		#把操作文件的光标移动到指定位置(按字节,根据utf8的占用)
    		#  *注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样。
    		# 如‘路费学成’用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek     
    		# 但如果是utf-8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处  理剩下的文本时发现用
    		示例:f.seek(0)    #把光标移动到0开头的位置。数值读的是字节(byts)。
    	def seekable(self,*args,**kwargs):   #real signature unknown
    		#判断文件是否可进行seek操作。
    	def tell(self, *args, **kwargs):  # real signature unknown
    		# 返回当前文件操作光标位置。
    		示例:f.tell()  查看光标所在文件内的位置。返回的值是按照字节(byts)计算的。
    	def truncate(self, *args, **kwargs):  # real signature unknown
    		# 按指定长度截断文件
    		# *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。
    		示例:f.truncate(8)    #从文件开头将光标移到8的位置,从8位置到尾部全部去掉。
    			  f.truncate()     #从光标当前位置截到文件最后的内容全部去掉。
    	def writable(self, *args, **kwargs):  # real signature unknown
    		# 判断文件是否可写。
    
    八、文件修改功能:
    	#文件的修改功能:占硬盘修改版。
    	import os    #引入os模块,os调用系统命令。
    
    	f_name = "dong.txt"   #源文件变量名称为f_name
    	f_new_name = "%s.new" %f_name   #新文件变量名为f_new_name
    
    	old_str = "李四"   #源文件内容李四。
    	new_str = "张三"   #修改成张三。
    
    	f = open(f_name,"r",encoding="utf-8")   #原文件以读的方式打开
    	f_new = open(f_new_name,"w",encoding="utf-8")  #新文件以写的方式打开。
    
    	for line in f:  #将f读模式,读出来的内容附到line
    		if old_str in line:     #判断line文件中有没有old_str‘常利东’
    			line = line.replace(old_str,new_str)     #将old_str,修改为new_str
    
    		f_new.write(line)    #将修改完的line写入到f_new
    
    	f.close()   #结束保存文件。
    	f_new.close()
    
    	os.rename(f_new_name,f_name)    #将新文件名,修改成源文件名。  系统会新文件覆盖就文件。
    

     文件操作功能总结:

    file = 'p1.txt'   #文档的 路径位置。
    
    mode = 'r'   #读取模式。  r读。
    mode = 'r+'   #读写模式,先读后写
    mode = 'rb'  # r读取,b二进制。以二进制读取。
    
    mode = 'w'   #创建文件。
    mode = 'w+'  #先写后读
    mode = 'wb'  #以二进制创建。
    
    mode = 'a'   #追加,插入默认追加到尾部。
    mode = 'ab'  #以二进制追加。
    
    read     #读文件内容。
    write    #写文件内容。
    import #引入   可引入第三方工具。chardet,os 。
    
    chardet#判断文件字符编码
    chardet.detect(data)  #查看字符编码是什么。
    
    
    encoding = 'utf-8'  #编码成UTF-8字符格式。
    data = f.read#读取F的内容到data
    chardet.detect(data)  #查看文件字符串编码是什么。
    data.decode('gbk2312')   #解码成gbk2312
    
    f.close#结束代码程序。
    
    #其它功能
    f.fileno()    # 返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到。
    f.close()     # 把文件从内存buffer里强制刷新到硬盘。#buffer的大小可以调整。
    f.flush()  # 强制将write临时存在内存的文件,强制存进硬盘。
    f.readable()  # 判断是否可读。判断的是linux下的特殊文件。也可以判断文件。
    f.seekable()   # 判断文件是否可进行seek操作。
    f.writable()  # 判断文件是否可写。
    f.readline()  # 只读一行,遇到
     or 
     为止。
    f.seek()        # 把操作文件的光标移动到指定位置#  *注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样。
    f.tell()      # 返回当前文件操作光标位置。
    f.truncate()  # 按指定长度截断文件
    #  *指定长度的话,就从文件指定的位置开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

     

  • 相关阅读:
    Java 实现 蓝桥杯 生兔子问题
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    深入探究VC —— 资源编译器rc.exe(3)
    深入探究VC —— 编译器cl.exe(2)
    深入探究VC —— 编译器cl.exe(1)
  • 原文地址:https://www.cnblogs.com/qiandong/p/13228465.html
Copyright © 2011-2022 走看看