python 使用 with open() as 读写文件的操作方法

2023-11-07

读文件:

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

1

>>> f = open('E:\python\python\test.txt', 'r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。

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

1

2

3

4

f=open('E:\python\python\notfound.txt', 'r')

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对象表示:

1

2

>>> f.read()

'Hello, python!

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

1

>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:

1

2

3

4

5

6

try:

    f = open('/path/', 'r')

    print(f.read())

finally:

    if f:

        f.close()

每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

1

2

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()最方便:

1

2

for line in f.readlines():

    print(line.strip()) # 把末尾的'\n'删掉

写文件

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

1

2

3

>>> f = open('E:\python\python\test.txt', 'w')

>>> f.write('Hello, python!')

>>> f.close()

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

1

2

with open('E:\python\python\test.txt', 'w') as f:

    f.write('Hello, python!')

要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码

字符编码

要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:

1

2

3

>>> f = open('E:\python\python\gbk.txt', 'r', encoding='gbk')

>>> f.read()

'测试'

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

1

>>> f = open('E:\python\python\gbk.txt', 'r', encoding='gbk', errors='ignore')

二进制文件

前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:

1

2

3

>>> f = open('E:\python\python\test.jpg', 'rb')

>>> f.read()

b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

总结:以后读写文件尽量使用with open语句,少使用f = open()语句

对于多个文件的读写,可以写成以下两种方式:

1、

1

2

3

4

5

6

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      

        ........       

        ........       

        ........

2、

1

2

3

4

5

6

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 对象属性:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 使用 with open() as 读写文件的操作方法 的相关文章

随机推荐

  • C#中的变量祥解

    一 C 数据类型 A 值类型 值类型变量可以直接分配一个值 它是从System ValueType派生而来 值类型直接包含数据 比如int char float 他们分别存储整型数据 字符 浮点数 当你申明一个值类型时 系统分别空间来存储值
  • MySQL中的读锁和写锁

    MySql锁 数据库都是悲观锁 java redis zookeeper会有乐观锁 锁的概念 MySQL中的锁 MyISAM锁 MyISAM共享读锁 MyISAM独占写锁 MyISAM锁调度 InnoDb InnoDb行锁 InnoDb表锁
  • 21天打卡挑战学习MySQL——《Docker容器安装》第三周 第七篇

    活动地址 CSDN21天学习挑战赛 前言 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级 可移植的容器中 然后发布到任何流行的 Linux 机器上 也可以实现虚拟化 Docker支持在主流的操作系统平台上使用 包括 Wind
  • RecyclerView曝光埋点

    RecyclerView曝光埋点 在做客户端埋点的时候 一般分为三类事件 页面浏览事件 元素点击事件 列表item元素曝光事件 页面浏览事件和元素点击事件在做代码埋点时可以很简单的进行埋点 对列表item元素曝光事件的埋点相对来说就麻烦许多
  • 2. 初识Python脚本

    Python的系列课程是写给零基础的小白看的 如果基础比较好的小伙伴可以暂时先不关注 等待后续课程 Hi 大家好 我是茶桁 之前的课程已经给大家讲解了Python相关特性和基本语法 那么这节课呢 我们尝试着从最简单的脚本来开始认识Pytho
  • IDEA 项目结构出现 0%classes,0% lines covered解决方法

    Ctrl Alt F6 然后取消勾选 中间的那个No Coverage
  • 苹果邮件怎么添加qq邮箱_iPhone自带邮件无法登陆QQ邮箱?

    要说现在什么邮箱用的最频繁 个人认为是QQ邮箱 但如今我们都喜欢在手机上处理一些事情 接收和回复邮件也不例外 不过许多iPhone用户可能都遇到过 在苹果手机自带邮件内添加QQ邮箱时 总是显示用户名或密码不正确 今天就来帮大家解决这个问题
  • C++参数传递与返回值

    1 const member function 常量成员函数 在类内 如果不改变数据 就写为常量成员函数 FUNCTION1 const 为什么要使用常量成员函数呢 for example template
  • 单目标应用:基于成长优化算法(Growth Optimizer,GO)的微电网优化调度MATLAB

    一 微网系统运行优化模型 微电网是由分布式电源 储能装置和能量转换装置等组成的小型发配电系统 具有成本低 电压低 污染小等特点 由于环保和能源压力 清洁可再生能源和分布式能源工业发展潜力巨大 微电网控制器可实现对电网的集中控制 采用分布式电
  • 使用 FasterTransformer 和 Triton 推理服务器部署 GPT-J 和 T5

    使用 FasterTransformer 和 Triton 推理服务器部署 GPT J 和 T5 文章目录 使用 FasterTransformer 和 Triton 推理服务器部署 GPT J 和 T5 简介 主要步骤概述 第 1 步 从
  • 点云从入门到精通技术详解100篇-定子装配过程中基于深度学习的易变形材料的点云分割

    目录 前言 易变形导线装配过程及问题 国内外相关研究现状 三维视觉的研究现状
  • Windows中Lua环境配置记录

    之前在Mac环境下配置了Lua的环境 因为装的是双系统 Mac有点不稳定 所以更多的时候我是在用Windows系统 所以就想在windows上也将环境配置好 一开始感觉windows应该很好配置 网上的教程应该有很多 可是当自己查起来的时候
  • 2022第十一届中国创新创业大赛全国总决赛在深圳举办

    为深入贯彻党的二十大精神和创新驱动发展战略 强化企业科技创新主体地位 支持企业融合创新 推进科技型创新型企业遴选和培育 加大金融对硬科技企业的支持力度 营造有利于科技型中小微企业成长的环境 推动创新链产业链资金链人才链深度融合 第十一届中国
  • 如何给信号加噪声,matlab

    Matlab信号上叠加噪声和信噪比的计算 http www ilovematlab cn thread 54155 1 1 html 出处 MATLAB中文论坛 在信号处理中经常需要把噪声叠加到信号上去 在叠加噪声时往往需要满足一定的信噪比
  • 深度学习模型学习笔记

    我作为新手的一些学习笔记 backbone 主干网络 主干网络大多时候指的是提取特征的网络 其作用就是提取图片中的信息 供后面的网络使用 这些网络经常使用的是Resnet VGG等 而不是我们自己设计的网络 因为这些网络已经证明了在分类等问
  • Centos LVS DR模式详细搭建过程

    目录 前言 1 1 LVS环境组网 2 2 ipvsadm安装前准备 2 3 httpd与ipvsadm下载 3 4 LVS负载均衡配置 4 5 真实WEB服务器配置及arp抑制 5 6 LVS负载均衡测试 6 7 附 arp抑制参数 7
  • Unity 鼠标拖拽控制旋转物体

    Unity 鼠标拖拽控制旋转物体 需求 鼠标左键拖拽 控制物体旋转 摄像机固定不动 可以使用下面的代码 但是当摄像机移动到物体背后时 出现拖拽旋转方向与摄像机在正面时相反的问题 gameObj transform Rotate transf
  • FISCO BCOS 区块链(一)

    目录 一 搭建 FISCO BCOS 链 1 安装 openssl curl 依赖 2 安装 build chain 脚本 二 配置控制台 1 下载java jdk 2 安装控制台 3 拷贝配置文件以及证书 4 启动控制台 三 Java S
  • linux crontab 文件位置和日志位置

    一 文件位置 位置一般在 var spool cron 下 如果你是root用户 那下面有个root文件 建议日常备份 避免误删除导致crontab 文件丢失 二 日志文件位置 默认情况下 crontab中执行的日志写在 var log下
  • python 使用 with open() as 读写文件的操作方法

    读文件 要以读文件的模式打开一个文件对象 使用Python内置的open 函数 传入文件名和标示符 1 gt gt gt f open E python python test txt r 标示符 r 表示读 这样 我们就成功地打开了一个文