Python 文件操作的详解及实例
发布时间 - 2026-01-11 03:18:15 点击率:次Python 文件操作的详解及实例

一、文件操作
1、对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现有文件如下:
昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。
f = open('小重山') #打开文件
data=f.read()#获取文件内容
f.close() #关闭文件
注意:if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要f=open(‘hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。
2、文件打开模式
Character Meaning
'r' open for reading (default) 'w' open for writing, truncating the file first 'x' create a new file and open it for writing 'a' open for writing, appending to the end of the file if it exists 'b' binary mode 't' text mode (default) '+' open a disk file for updating (reading and writing) 'U' universal newline mode (deprecated)
先介绍三种最基本的模式:
# f = open('小重山2','w') #打开文件
# f = open('小重山2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')
3、文件具体操作
f = open('小重山') #打开文件
# data1=f.read()#获取文件内容
# data2=f.read()#获取文件内容
#
# print(data1)
# print('...',data2)
# data=f.read(5)#获取文件内容
# data=f.readline()
# data=f.readline()
# print(f.__iter__().__next__())
# for i in range(5):
# print(f.readline())
# data=f.readlines()
# for line in f.readlines():
# print(line)
# 问题来了:打印所有行,另外第3行后面加上:'end 3'
# for index,line in enumerate(f.readlines()):
# if index==2:
# line=''.join([line.strip(),'end 3'])
# print(line.strip())
#切记:以后我们一定都用下面这种
# count=0
# for line in f:
# if count==3:
# line=''.join([line.strip(),'end 3'])
# print(line.strip())
# count+=1
# print(f.tell())
# print(f.readline())
# print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
# print(f.read(5))#一个中文占三个字符
# print(f.tell())
# f.seek(0)
# print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符
#terminal上操作:
f = open('小重山2','w')
# f.write('hello \n')
# f.flush()
# f.write('world')
# 应用:进度条
# import time,sys
# for i in range(30):
# sys.stdout.write("*")
# # sys.stdout.flush()
# time.sleep(0.1)
# f = open('小重山2','w')
# f.truncate()#全部截断
# f.truncate(5)#全部截断
# print(f.isatty())
# print(f.seekable())
# print(f.readable())
f.close() #关闭文件
接下来我们继续扩展文件模式:
# f = open('小重山2','w') #打开文件
# f = open('小重山2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')
# f.close()
#r+,w+模式
# f = open('小重山2','r+') #以读写模式打开文件
# print(f.read(5))#可读
# f.write('hello')
# print('------')
# print(f.read())
# f = open('小重山2','w+') #以写读模式打开文件
# print(f.read(5))#什么都没有,因为先格式化了文本
# f.write('hello alex')
# print(f.read())#还是read不到
# f.seek(0)
# print(f.read())
#w+与a+的区别在于是否在开始覆盖整个文件
# ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!'
# 有同学说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!!
# f = open('小重山2','r+') #以写读模式打开文件
# f.readline()
# f.readline()
# f.readline()
# print(f.tell())
# f.write('hello 岳飞')
# f.close()
# 和想的不一样,不管事!那涉及到文件修改怎么办呢?
# f_read = open('小重山','r') #以写读模式打开文件
# f_write = open('小重山_back','w') #以写读模式打开文件
# count=0
# for line in f_read:
# if count==3:
# f_write.write('hello,岳飞\n')
#
# else:
# f_write.write(line)
# another way:
# if count==3:
#
# line='hello,岳飞2\n'
# f_write.write(line)
# count+=1
# #二进制模式
# f = open('小重山2','wb') #以二进制的形式读文件
# # f = open('小重山2','wb') #以二进制的形式写文件
# f.write('hello alvin!'.encode())#b'hello alvin!'就是一个二进制格式的数据,只是为了观看,没有显示成010101的形式
注意1: 无论是py2还是py3,在r+模式下都可以等量字节替换,但没有任何意义的!
注意2:有同学在这里会用readlines得到内容列表,再通过索引对相应内容进行修改,最后将列表重新写会该文件。
这种思路有一个很大的问题,数据若很大,你的内存会受不了的,而我们的方式则可以通过迭代器来优化这个过程。
补充:rb模式以及seek
在py2中:
#昨夜寒蛩不住鸣.
f = open('test','r',) #以写读模式打开文件
f.read(3)
# f.seek(3)
# print f.read(3) # 夜
# f.seek(3,1)
# print f.read(3) # 寒
# f.seek(-4,2)
# print f.read(3) # 鸣
在py3中:
# test:
昨夜寒蛩不住鸣.
f = open('test','rb',) #以写读模式打开文件
f.read(3)
# f.seek(3)
# print(f.read(3)) # b'\xe5\xa4\x9c'
# f.seek(3,1)
# print(f.read(3)) # b'\xe5\xaf\x92'
# f.seek(-4,2)
# print(f.read(3)) # b'\xe9\xb8\xa3'
#总结: 在py3中,如果你想要字符数据,即用于观看的,则用r模式,这样我f.read到的数据是一个经过decode的
# unicode数据; 但是如果这个数据我并不需要看,而只是用于传输,比如文件上传,那么我并不需要decode
# 直接传送bytes就好了,所以这个时候用rb模式.
# 在py3中,有一条严格的线区分着bytes和unicode,比如seek的用法,在py2和py3里都是一个个字节的seek,
# 但在py3里你就必须声明好了f的类型是rb,不允许再模糊.
#建议: 以后再读写文件的时候直接用rb模式,需要decode的时候仔显示地去解码.
4、with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
pass
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with open('log1') as obj1, open('log2') as obj2:
pass2
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Python
# 文件操作
# 文件操作的详解
# 文件输出
# 简单文件操作python 修改文件指定行的方法
# Python 文件操作技巧(File operation) 实例代码分析
# Python文件操作
# open读写文件
# 追加文本内容实例
# Python 文件操作实现代码
# Python复制文件操作实例详解
# Python常见文件操作的函数示例代码
# Python实现的读取/更改/写入xml文件操作示例
# Python中shutil模块的常用文件操作函数用法示例
# python读写文件操作示例程序
# 使用Python进行稳定可靠的文件操作详解
# 详解Python中的文件操作
# 使用Python对Csv文件操作实例代码
# python 文件操作删除某行的实例
# Python读取properties配置文件操作示例
# python with statement 进行文件操作指南
# python解析xml文件操作实例
# Python文件操作类操作实例详解
# Python文件操作方法详解
# 岳飞
# 来了
# 昨夜
# 句柄
# 英文
# 白首
# 的是
# 都是
# 是一个
# 操作系统
# 在这里
# 好了
# 你就
# 多个
# 才是
# 如有
# 莫等闲
# 但在
# 可以通过
# 希望能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
java获取注册ip实例
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何快速完成中国万网建站详细流程?
Thinkphp 中 distinct 的用法解析
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在服务器上配置二级域名建站?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何实现本地化和多语言支持?(i18n教程)
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
昵图网官网入口 昵图网素材平台官方入口
利用python获取某年中每个月的第一天和最后一天
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
什么是javascript作用域_全局和局部作用域有什么区别?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
,交易猫的商品怎么发布到网站上去?
如何获取上海专业网站定制建站电话?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何在宝塔面板创建新站点?
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何用5美元大硬盘VPS安全高效搭建个人网站?
高防服务器租用如何选择配置与防御等级?
Laravel如何升级到最新版本?(升级指南和步骤)
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel怎么连接多个数据库_Laravel多数据库连接配置
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何在宝塔面板中修改默认建站目录?
javascript中闭包概念与用法深入理解
教你用AI润色文章,让你的文字表达更专业
SQL查询语句优化的实用方法总结
如何在阿里云部署织梦网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法

