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('\n张三25,手机号:1123654248')     #\n 换行插入。
	f.close()    结束代码。

六、混合操作文件。
	读写模式:‘r+’ 先读后写,支持往后追加。
	f = open(file='cld.txt',mode='r+',encoding='utf-8')
	data = f.read()
	f.write('\n张三,手机:')
	f.write('\n李四,手机:1234567')
	f.close()

	写读模式:’w+’   以写的模式打开,就是以创建的形式。支持读,支持读前面写进去的内容。
	f = open(file='cld.txt',mode='w+',encoding='utf-8')
	data = f.read()
	f.write('\n王五,手机:12345678912')
	f.write('\n赵六,手机: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
		#只读一行,遇到\r or \n 为止。  
		单行读,有换行的位置终止,读到哪一行光标就在哪一行。
 
	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()  # 只读一行,遇到\r or \n 为止。
f.seek()        # 把操作文件的光标移动到指定位置#  *注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样。
f.tell()      # 返回当前文件操作光标位置。
f.truncate()  # 按指定长度截断文件
#  *指定长度的话,就从文件指定的位置开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

 

posted @ 2020-07-03 09:29  东风伴侣  阅读(145)  评论(0编辑  收藏  举报