Python项目开发基础 -- with open (filename) as 读写文件
目录
常规读取文件:
with open () as 读取文件
读取方法区别
写文件
读取字符编码文件
读取二进制文件
总结
附录
常规读取文件:
要以读文件的模式打开一个文件对象,使用Python内置的open()
函数,传入文件名和标示符:
f = open('E:\python\python\test.txt', 'r')
标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
Traceback (most recent call last):File "<stdin>", line 1, in <module>FileNotFoundError: [Errno 2] No such file or directory: 'E:\python\python\notfound.txt'
如果文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str
对象表示:
f.read()
最后一步是调用close()
方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try:f = open('/path/', 'r')print(f.read())finally:if f:f.close()
with open () as 读取文件
每次都这么写实在太繁琐,所以,Python引入了with
语句来自动帮我们调用close()
方法:
with open('/path/to/file', 'r') as f:print(f.read())
这和前面的try ... finally
是一样的,但是代码更佳简洁,并且不必调用f.close()
方法。
读取方法区别
调用read()
会一次性读取文件的全部内容,如果文件有20G,内存就爆了,所以,要保险起见,可以反复调用read(size)
方法,每次最多读取size个字节的内容。
另外,调用readline()
可以每次读取一行内容,调用readlines()
一次读取所有内容并按行返回list
。因此,要根据需要决定怎么调用。
如果文件很小,read()
一次性读取最方便;如果不能确定文件大小,反复调用read(size)
比较保险;如果是配置文件,调用readlines()
最方便:
for line in f.readlines():print(line.strip()) # 把末尾的'\n'删掉
写文件
写文件和读文件是一样的,唯一区别是调用open()
函数时,传入标识符'w'
或者'wb'
表示写文本文件或写二进制文件:
f = open('E:\python\python\test.txt', 'w')f.write('Hello, python!')f.close()
可以反复调用write()
来写入文件,但是务必要调用f.close()
来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()
方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()
的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with
语句来得保险:
with open('E:\python\python\test.txt', 'w') as f:f.write('Hello, python!')
要写入特定编码的文本文件,请给open()
函数传入encoding
参数,将字符串自动转换成指定编码
读取字符编码文件
要读取非UTF-8编码的文本文件,需要给open()
函数传入encoding
参数,例如,读取GBK编码的文件:
f = open('E:\python\python\gbk.txt', 'r', encoding='gbk')f.read()
遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError
,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()
函数还接收一个errors
参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
f = open('E:\python\python\gbk.txt', 'r', encoding='gbk', errors='ignore')
读取二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'
模式打开文件即可:
f = open('E:\python\python\test.jpg', 'rb')f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节
总结
以后读写文件尽量使用with open语句,少使用f = open()语句
附录
对于多个文件的读写,可以写成以下两种方式:
with open('C:\Desktop\text.txt','r') as f:with open('C:\Desktop\text1.txt','r') as f1:with open('C:\Desktop\text2.txt','r') as f2
with open(''C:\Desktop\text.txt','r') as f:
........
with open(''C:\Desktop\text1.txt','r') as f1:
........
with open('C:\Desktop\text2.txt','r') as f2:
........
文件的读写方式列表:
File 对象属性:
参考:
https://blog.csdn.net/xrinosvip/article/details/82019844
Python项目开发基础 -- with open (filename) as 读写文件相关推荐
- Python自动化开发基础 项目实战-监控系统 Day16-李杰-专题视频课程
Python自动化开发基础 项目实战-监控系统 Day16-14487人已学习 课程介绍 课程特色:实战,细致,生动,深入浅出 适用人群:适合Python初学者 课程详情:从0基础开始 ...
- python项目开发实战网盘-python项目开发实战 第2版
python项目开发实战 第2版是一本Python项目开发流程实战手册,由日本BePROUD股份有限公司编著.本书的内容全部基于python开发事实,全部都是BeProud员工实际尝试.实践过的,可以 ...
- python项目开发实战网盘-《Python项目案例开发从入门到实战》PDF版百度网盘
「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...
- python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...
- python项目开发实战-给缺少Python项目实战经验的人
我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...
- python项目开发案例集锦_在线分享 | 在 VS Code 中一站式完成 Python 项目开发
往期活动回顾 VS Code 中文社区自成立以来,已经举办了4场活动: Workshop | First Step to VS Code 基础篇 Workshop | First Step to VS ...
- python项目开发实例-《Python项目案例开发从入门到实战》PDF版百度网盘
「教程分享:Python项目开发从入门到实列」 本书例子具有实用性,20个不同类型的完整列子,600分钟高品质配套教学视频,完整的源码和教学课件,让你对枯燥的Python语言学习充满乐趣. 编辑推荐 ...
- Python excel xlwings+QT 考勤表开发 -【Python Office开发基础培训】 拆分合并文件
Python excel xlwings+QT 考勤表开发 1. 概述 2. QT界面搭建 2.1搭建界面 3. 搭建软件架构 3. 读取输入文件 3.1链接文件 3.2读取表格 3.3解析为树状结构 ...
- python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码
会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...
- python项目开发实例书-Python项目开发实战
本书案例具有实用性,如校园网搜索引擎.小小翻译器.抓取百度图片这些爬虫案例略加修改可以应用实际项目中:还有通过微信通信协议开发微信机器人,机器学习的文本分类.基于卷积神经网络的手写体识别等案例,另外是 ...
最新文章
- QEventLoop的简单使用(一)
- 设有n个正整数,将它们排成一排,组成一个最大的多位整数
- [渝粤教育] 中国地质大学 信息资源管理 复习题 (2)
- 批处理ping指定ip列表
- lombok的使用三部曲及使用中遇到的问题(持续更新)
- “XEIM”国内开源即时通讯XEIM
- php和xml区别,php和XML
- Mac OS X安装 ffmpeg
- Markdown图片并排展示、图注对齐
- Spark RDD的运行机制 工作节点分布关系
- 5G啊5G,你是不是只比4G多一G?
- android pc投屏,如何解决乐播投屏中投屏失败的问题【乐播投屏】
- 美团搜索多业务商品排序探索与实践
- 微软Win8Server2012各版本安装密匙序列号
- php 中%3cspan%3e,隐藏第三方网站统计图标
- 20140124孤独者之旅23
- 烤仔的朋友们 | 细数11位身价超十亿美元加密富豪,灰度创始人仅排第七
- xp外观主题下载_增强Windows XP外观的简便方法
- Typhon升级到5.8,编译原来程序出现提示:Compilation raised exception internally
- TMS320f28335实现步进电机的驱动程序及原理分析
热门文章
- nginx配置ssl证书的方法
- Decide what you want,and go after it with everything you got!
- 构建之法1,5,17章学习心得
- Android 第三方应用接入微信平台(2)
- Pointer Networks简介及其应用(格式化)
- 通过图像的指针读取图像
- Conditional Generative Adversarial Nets论文翻译
- 摄影测量学之共线方程的应用
- Apache Flink 在快手的过去、现在和未来
- 如何在 Flink 1.9 中使用 Hive?