文章目录

  • 1. 传统读文件
  • 2. with open() as 读文件
  • 3. 传统写文件
  • 4. with open() as 读文件
    • 二进制文件

最近在项目中用到了Python的with as来开关读写文件,特此记录下,方便以后使用

1. 传统读文件

传统读取文件的方法是先使用Python内置的open函数打开文件,然后标示符’r’表示读,这样,我们就成功地打开了一个文件,获得到一个f文件句柄。

f = open('test.txt','r')

如果文件不存在,open()函数就会抛出一个错误,并且给出错误码和详细的信息告诉你文件不存在:

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-32-3fb42b740c2c> in <module>
----> 1 f = open('test1.txt','r')FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt'

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容

f.read()
'hello world'

Python把内容读到内存,用一个str字符串表示

type(f.read())
str

最后一步是是任何语言都一样的操作,调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

f.close()

如果文件在读取的过程中抛出异常,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:

try: f =open('test1.txt','r')print(f.read())
finally:print('打开失败')f.close()

2. with open() as 读文件

每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法,同时也解决了异常问题:

with open('test.txt','r') as f :print(f.read())
hello world

这和前面的try … finally是一样的,但是代码更佳简洁,无论有无异常均可自动调用f.close()方法。

调用read()会一次性读取文件的全部内容,如果文件很大,内存就爆了,所以可以反复调用read(size)方法,每次最多读取size个字节的内容。

  • 调用readline()可以每次读取一行内容。
  • 调用readlines()一次读取所有内容并按行返回list。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

for line in f.readlines():print(line.strip()) # 把末尾的'\n'删掉
hello world1
hello world2
hello world3

3. 传统写文件

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:

f = open('test.txt', 'w')
f.write('Hello, python!')
f.close()

可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。

4. with open() as 读文件

写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:

with open('test.txt','w') as f:f.write('Hello, python!')

有些处理文本的工具包可能需要文本具有特殊的格式,要写入特定编码的文本文件,可以给open()函数传入encoding参数,将字符串自动转换成指定编码,如之前项目中使用的utf-8编码可以适配中文

f = open('txt.txt', 'r', encoding='utf-8')
f.read()

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:

f = open('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('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  xxx
with open(''C:\Desktop\text.txt','r') as f:
xxx
with open(''C:\Desktop\text1.txt','r') as f1:
xxx
with open('C:\Desktop\text2.txt','r') as f2:
xxx

附录:

文件读取模式表:

File 对象属性:

参考学习资料:
https://www.cnblogs.com/ymjyqsx/p/6554817.html
https://www.cnblogs.com/tianyiliang/p/8192703.html
https://blog.csdn.net/xrinosvip/article/details/82019844

python使用with as 读写文件相关推荐

  1. Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义

    Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义 文章目录 Python随笔:进行读写文件时,在字符串前加 r,u,b,f 的含义 1.r'xxx' 的含义 2.u'xxx' 的 ...

  2. Python with open() as 读写文件

    读文件: 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符: >>> f = open('E:\python\python\test.tx ...

  3. 自学python(mac)----读写文件

    python 读写文件-----文本编辑器 我们先来了解一些与文件相关的命令(就是方法或者函数). close:关闭文件 read:读取文件内容,可以把结果赋给一个变量 readline:只读取文本文 ...

  4. python怎么读write_Python读写文件

    Python读写文件 现在做CV又要开始用Python了,复习一下Python怎么读写文件23333 读文件 fin=open('','r') #read the whole file theWhol ...

  5. python 学习记录-用python从硬盘中读写文件 Day21

    (一)文件操作 文件操作步骤: 第一步: 打开文件 f = open(文件名, 操作模式, encoding=文件编码) 第二步: 读写文件 f.read() f.write() 第三步: 关闭文件 ...

  6. python中的rt_Python 读写文件中w与wt, r与rt的区别

    w和wt是一们的,r和rt是一样的,t是默认参数,可以省略的,help(open)就能看到open的参数的详细说明. w,r,wt,rt都是python里面文件操作的模式. w是写模式,r是读模式. ...

  7. 会计与python结合cai wt-Python 读写文件中w与wt, r与rt的区别

    w和wt是一们的,r和rt是一样的,t是默认参数,可以省略的,help(open)就能看到open的参数的详细说明. w,r,wt,rt都是python里面文件操作的模式. w是写模式,r是读模式. ...

  8. python中csv模块读写文件

    一.csv模块读文件 1. csv.reader–可迭代对象 通过索引获取文档内容 def csv_read():file = open('./txt/names.csv','r')reader = ...

  9. python敏感词过滤代码简单代码,Python学习笔记系列——读写文件以及敏感词过滤器的实现...

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

最新文章

  1. v7000更换电池步骤_v7000 gen1 电池更换问题
  2. Fast Stone超好用的截图工具,可截取长图,带滚动条的页面
  3. IBatis.Net学习笔记五--常用的查询方式
  4. 北京联合大学计算机学院在哪个校区,北京联合大学各校区联系地址大全
  5. 最大正方形(洛谷-P1387)
  6. C++实现LRU算法(LeetCode 146 LRU缓存机制)
  7. python中的unicode码是什么_Python中Unicode字符串
  8. 从苹果供应商看2018年全球电子产业链的中国势力变化
  9. java 条形码_Java 生成、识别条形码
  10. web 计算器_计算器中的奢侈品——CASIO S200
  11. 年度成绩大赏|2021,StreamNative 扬帆起航
  12. python七段数码管绘制实验报告_Python绘制七段数码管实例代码
  13. python sklearn K-Mearns---实例——消费水平
  14. Batch Norm
  15. Wide-Mouth Frog(大嘴青蛙)协议
  16. 流利说懂你英语结班学习总结
  17. 域服务器修复,重置 Windows 域目录还原(DRSM)密码
  18. Thinkphp快速入门(一)
  19. java8 supplier_Java8 Supplier接口和Consumer接口原理解析
  20. Raw use of parameterized class 处理

热门文章

  1. 共享一下, 国家授时中心服务器的IP地址
  2. 【2020年度征文】以梦为马,不负韶华
  3. 深度学习8 keras中triplet network的搭建
  4. Python 批量加水印只需一行命令!
  5. 深入理解JavaScript执行上下文与作用域链
  6. 快速排斥、跨立实验判断线段是否相交
  7. 用树莓派给实验室做个门禁
  8. 什么是以太坊域名服务(ENS)?
  9. gitlab访问令牌使用_GitHub 创建个人访问令牌
  10. VMware中的网络连接