Day2-Python3基础-文件操作
1. 字符编码与转码
需知:
1.在python3默认编码是unicode
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

import sys print(sys.getdefaultencoding()) msg = "我爱北京天安门" #msg_gb2312 = msg.decode("utf-8").encode("gb2312") msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔 gb2312_to_unicode = msg_gb2312.decode("gb2312") gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") print(msg) print(msg_gb2312) print(gb2312_to_unicode) print(gb2312_to_utf8)
2. 文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
读取文件
读取文件read()方法

ff=open(r'G:\新建文本文档.txt')#打开文件 print("文件名为:",ff.name)#输出文件的名称 print(ff.read(6))#读取前6个字符 #如果想读取整个文本内容,可以不指定size的值或将size的值设置为负数 print(ff.read())
逐行读取readline()方法

fu = open(r'G:\newtest.txt')#打开文件 print('文件名称为:',fu.name)#输出文件名称 line=fu.readline() print("读取第一行 %s" % (line)) print("读取的字符串为:%s" % fu.readline(5)) fu.close()#关闭文件
返回文件各行内容的列表readlines()方法

#readlines()方法用于读取所有行并返回列表。 #fileobject.readlines(size),size为从文件中读取的字符数 fy=open(r'G:\newtest.txt') print("文件名称为:",fy.name) line=fy.readlines() print("读取的文本数据为:%s" % line) fy.close()
返回文件的当前位置tell()方法

#tell()方法返回文件的当前位置,即文件指针当前位置。 fileobject.tell() fu=open(r'G:\newtest3.txt') print("文件名称为:",fu.name) line=fu.readline() print("当前数据为:%s" % (line)) post=fu.tell() print("当前位置为:%s" % (post)) fu.close()
截断文件truncate()方法

#truncate()方法用于截断文件。fileobject.truncate([size]),size为可选参数,如果指 #定size,则表示截断文件为size个字符。如果没有指定size,则重置到当前位置。 fu=open(r'G:\newtest3.txt','r+') print("文件名称为:",fu.name) line=fu.readline() print("当前获取地数据为: %s"%(line)) fu.truncate()#从当前位置截断文件 line1=fu.readlines() print("当前文本数据为:%s" % (line1)) fu.close()

#用户也可以指定需要截断的字符数 fu=open(r'G:\newtest3.txt','r+') print("文件名称为:",fu.name) fu.truncate(6)#截断6字符 line1=fu.read() print("当前文本数据为:%s" % (line1)) fu.close()
设置文件当前位置seek()方法

''' seek()方法用于移动文件读取指针到指定位置。 fileobject.seek(offset[,whence]) offset表示开始的偏移量,也就是需要移动偏移的字节数。whence为可选参数,表示从哪个 位置开始偏移,默认值为0,表示从文件的开始算起;若为1则表示从当前位置算起,若为2,则表示 从文件末尾算起。 ''' fu=open(r'G:\newtest3.txt','r+') print("文件名称为:",fu.name) line=fu.readline() print("当前文本数据为:%s" % (line)) fu.seek(0,0)#重新设置文件读取指针到开头 line1=fu.readline() print("当前文本数据为:%s" % (line1)) print() fu.close()
写入文件
write()

''' write()方法用于向文件中写入指定字符串。在文件关闭前或缓冲区刷新前,字符串内容存储在 缓冲区中,此时在文件中看不到写入的内容。 write()方法 fileobject.write([str]),str为需要写入文件中的字符串。 ''' #将字符串的内容添加到test.txt文件中 fu=open(r'G:\test4.txt','r+') print("文件名称为:",fu.name) str='古木无人径,深山何处钟。' fu.seek(0,2)#设置位置为文件末尾处 line=fu.write(str) fu.seek(0,0)#设置位置为文件开始处 print("新文本数据为:%s" %fu.read()) fu.close()

#如果用户需要换行输入内容,可以使用"\n" #将字符串的内容添加到test.txt文件中 fu=open(r'G:\test4.txt','r+') print("文件名称为:",fu.name) str='\n冷风吹吹,吹呀吹' fu.seek(0,2)#设置位置为文件末尾处 line=fu.write(str) fu.seek(0,0)#设置位置为文件开始处 print("新文本数据为:%s" %fu.read()) fu.close()
writelines()

''' writelines()方法可以向文件写入一个序列字符串列表,如果需要换行则要加入每一行的换行符。 file.writelines([str]),str为写入文件的字符串序列 ''' fu=open(r'G:\test5.txt','w')#打开文件 print("文件名称为:",fu.name) sq=['春天的风\n','能否吹来夏天的雨\n','秋天的月\n','能否照亮冬天的雪\n', '夜空的星\n','能否落向晨曦的海\n'] fu.writelines(sq) fu.close() fu=open(r'G:\test5.txt') print(fu.read()) fu.close()
修改文件内容

ff=open(r'G:\file\test6.txt','w') print("文件名称为:",ff.name) sd=['春天的风\n','能否吹来夏天的雨\n','秋天的月\n','能否照亮冬天的雪\n', '夜空的星\n','能否落向晨曦的海\n'] ff.writelines(sd)#给test6.txt文件写入sd列表数据 ff.close() ff=open(r'G:\file\test6.txt') lines=ff.readlines() print("原始文本数据为",lines) ff.close() lines[1]='你只是一个过客。\n' ff=open(r'G:\file\test6.txt','w') ff.writelines(lines) ff.close() ff=open(r'G:\file\test6.txt') print("修改后的文本数据为:%s" %(ff.read()))
附加到文件

#创建一个文本文件test7.txt,并写入内容"煮豆燃豆萁,豆在釜中泣" ff=open(r'G:\file\test7.txt','w') st="煮豆燃豆萁,豆在釜中泣。" ''' 用户可以将一个文件的内容全部附加到另一个文件中。 ''' ff.write(st) ff.close() #创建一个文本文件test8.txt,并写入内容"本是同根生,相煎何太急?" ss=open(r'G:\file\test8.txt','w') tt="本是同根生,相煎何太急?" ss.write(tt) ss.close() #这里将test8的内容先赋值给变量content file=open(r'G:\file\test8.txt','r') coutent = file.read() file.close() #然后以追加模式打开test7.txt文件,将变量coutent fileadd=open(r'G:\file\test7.txt','a') fileadd.write(coutent) fileadd.close() #读取test7.txt的文本内容 file7=open(r'G:\file\test7.txt') print("test7.txt文本内容:",file7.read()) file7.close()
关闭文件

close()方法用于关闭一个已经打开的文件。关闭后的文件不可以在进行读写操作, 否则会触发ValueError错误。close()方法允许调用多次。 fileobject.close()
当file对象被引用到操作另一个文件时,Python会自动关闭之前的file对象。
刷新文件

''' flush()方法是用来刷新缓冲区的,即将缓冲区中的数据立即写入文件,同时清空缓冲区, 不需要被动地等待输出缓冲区重写 一般情况下,文件关闭后会自动刷新缓冲区,但是有时需要在关闭前刷新空缓冲区, 这是就可以调用flush()方法。 fileobject.flush() ''' fu=open(r'G:\file\test8.txt','r+') print("文件名称:",fu.name) str="看那轻飘飘的衣摆,趁擦肩把裙掀" fu.write(str) fu.flush() fu.close()
作者:Mr_Yun
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法