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() # 按指定长度截断文件
# *指定长度的话,就从文件指定的位置开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

浙公网安备 33010602011771号