Python开发 —— 文件读写操作open与with open

        在 Python 中,文件读写操作是非常常见的任务。本文是一些关键操作和代码示例,包括如何使用 `open`、`with open`、`read` 和 `write` 函数进行文件操作。

1. 打开文件 (open)

        使用 open 函数打开文件。在 Python 中,打开文件是进行文件操作的第一步。使用 open 函数可以打开文件,并返回一个文件对象。这个文件对象可以用于后续的读写操作。

        以下是关于 open 函数的详细解释和示例。

1.1 open 函数的基本语法

file_object = open(file_name, mode)

        - file_name:文件的名称或路径(字符串)。
        - mode:文件打开的模式(字符串),常见模式如下:

  - `'r'`:只读模式。文件必须存在,否则会抛出 `FileNotFoundError`。
  - `'w'`:写入模式。若文件不存在,会创建一个新文件;若文件存在,会截断(清空)文件。
  - `'a'`:追加模式。若文件不存在,会创建一个新文件;若文件存在,写入的数据会追加到文件末尾。
  - `'b'`:二进制模式。可以与其他模式结合使用,如 `'rb'`(二进制只读),`'wb'`(二进制写入),`'ab'`(二进制追加)。
  - `'+'`:读写模式。可以与其他模式结合使用,如 `'r+'`(读写),`'w+'`(写读),`'a+'`(追加读写)。

1.2 示例

1.2.1 只读模式('r')

        只读模式用于读取文件内容,文件必须存在。

try:file = open('example.txt', 'r')print('File opened successfully')
except FileNotFoundError:print('File not found')
finally:file.close()

1.2.2 写入模式('w')

        写入模式用于写入文件内容,如果文件存在,则会清空文件内容;如果文件不存在,则会创建一个新文件。

file = open('example.txt', 'w')
file.write('This is a test.')
file.close()

1.2.3 追加模式('a')

        追加模式用于在文件末尾追加内容,如果文件不存在,则会创建一个新文件。

file = open('example.txt', 'a')
file.write('\nThis is an appended line.')
file.close()

1.2.4 二进制模式('b')

        二进制模式用于处理非文本文件,如图像或其他二进制数据。

# 二进制只读模式
file = open('example.jpg', 'rb')
data = file.read()
file.close()# 二进制写入模式
file = open('example_copy.jpg', 'wb')
file.write(data)
file.close()
```

1.2.5 读写模式('+')

        读写模式用于同时读取和写入文件。文件必须存在,除非使用写读模式('w+')或追加读写模式('a+')。

# 读写模式(文件必须存在)
file = open('example.txt', 'r+')
content = file.read()
file.write('\nThis is added text.')
file.close()# 写读模式(文件不存在会创建,存在则清空)
file = open('example.txt', 'w+')
file.write('This is new content.')
file.seek(0)
content = file.read()
file.close()# 追加读写模式(文件不存在会创建,存在则追加)
file = open('example.txt', 'a+')
file.write('\nThis is appended content.')
file.seek(0)
content = file.read()
file.close()

2. with open

2.1 open 函数的基本语法

        使用 with open 语句可以确保文件在使用后自动关闭,这是一种更安全的文件操作方式。

with open('example.txt', 'r') as file:# 进行文件操作content = file.read()print(content)
# 在 with 语句块结束后,文件会自动关闭

2.2 详细示例

        以下是一个更详细的示例,展示了不同模式下如何打开文件:

# 示例:只读模式(文件必须存在)
try:with open('example.txt', 'r') as file:content = file.read()print('Read content:', content)
except FileNotFoundError:print('File not found')# 示例:写入模式(会覆盖现有文件)
with open('example.txt', 'w') as file:file.write('New content written.\n')# 示例:追加模式(追加到现有文件末尾)
with open('example.txt', 'a') as file:file.write('This line is appended.\n')# 示例:二进制模式读取和写入
with open('example.jpg', 'rb') as file:binary_data = file.read()with open('example_copy.jpg', 'wb') as file:file.write(binary_data)# 示例:读写模式(文件必须存在)
try:with open('example.txt', 'r+') as file:content = file.read()print('Original content:', content)file.write('Additional content.\n')
except FileNotFoundError:print('File not found')# 示例:写读模式(文件不存在会创建)
with open('example.txt', 'w+') as file:file.write('New content.\n')file.seek(0)content = file.read()print('Written and read content:', content)# 示例:追加读写模式(文件不存在会创建)
with open('example.txt', 'a+') as file:file.write('Appended content.\n')file.seek(0)content = file.read()print('Appended and read content:', content)

        通过这些示例,您可以深入理解如何在 Python 中使用不同模式打开和操作文件,确保正确读写文件内容并安全关闭文件。

3. 对比 open 和 with open

        在 Python 中,`open` 和 `with open` 都可以用于打开文件,但它们在处理文件的方式和资源管理上有显著区别。以下是两者的详细对比:

3.1 open 函数 

        open 函数是最基础的文件打开方法。使用 open 函数打开文件后,必须显式调用 close 方法关闭文件,以释放资源。如果忘记关闭文件,可能会导致资源泄漏或文件被锁定。

3.1.1 优点

        更加灵活,可以手动控制文件的打开和关闭。
        适用于需要复杂文件操作的场景。

3.1.2 缺点

        容易忘记调用 close 方法,导致资源泄漏。
        需要额外的代码来确保文件在出现异常时也能被正确关闭。

3.1.3  示例

try:file = open('example.txt', 'r')content = file.read()print(content)
finally:file.close()  # 确保文件被关闭

        在这个例子中,文件必须在 try 块结束后显式关闭,即使在读取文件过程中发生异常也要关闭文件。这种显式管理文件资源的方法增加了代码的复杂性。

3.2 with open 语句

        with open语句是上下文管理器的一部分,确保文件在使用结束后自动关闭。with open 语句简化了文件操作,避免了显式调用 close 方法,即使发生异常,文件也会被正确关闭。

3.2.1 优点

        自动管理文件资源,确保文件被正确关闭。

        代码更简洁,减少了管理文件资源的代码量。

        更安全,避免了资源泄漏。

3.2.2 缺点

        对于需要非常复杂的文件管理场景,可能不如 `open` 函数灵活。

3.2.3 示例

with open('example.txt', 'r') as file:content = file.read()print(content)
# 文件会在 with 语句块结束后自动关闭

        在这个例子中,with open 语句确保文件在读取完内容后自动关闭,即使在读取过程中发生异常也是如此。这样减少了显式管理文件资源的复杂性。

3.3 对比总结

特性openwith open
文件关闭管理需要显式调用 `close` 方法自动关闭文件
代码简洁性需要更多代码管理文件资源更加简洁
异常处理需要额外的代码确保文件在异常时关闭自动处理异常
灵活性适用于复杂的文件操作适用于大多数文件操作场景

3.4 实践中的对比

3.4.1 使用 open 管理文件资源

try:file = open('example.txt', 'r')content = file.read()print(content)
finally:file.close()  # 确保文件被关闭

        这个例子中,显式调用 file.close() 确保文件被正确关闭,但增加了代码量和复杂性。

3.4.2 使用 with open 管理文件资源

with open('example.txt', 'r') as file:content = file.read()print(content)
# 文件会在 with 语句块结束后自动关闭

        这个例子中,with open 自动管理文件关闭,代码更简洁、安全。

3.5 结论

        在大多数情况下,推荐使用 with open 语句来打开文件,因为它能自动管理文件资源,确保文件在使用结束后被正确关闭,减少了资源泄漏的风险和代码的复杂性。然而,对于需要非常复杂的文件操作场景,可能需要使用 open 函数进行更精细的控制。

4. 读取文件 (read)

        可以使用 `read` 方法读取文件的内容。常见的读取方法包括:

        read():读取整个文件。

        readline():读取文件中的一行。        

        readlines():读取文件中的所有行,并返回一个列表。

4.1 示例

        读取整个文件的内容:

with open('example.txt', 'r') as file:content = file.read()print(content)

        读取文件中的一行:

with open('example.txt', 'r') as file:line = file.readline()print(line)

        读取文件中的所有行:

with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line)

5. 写入文件 (write)

        可以使用 write 方法将数据写入文件。注意,如果文件以 w 模式打开,写入操作会覆盖文件的现有内容。

5.1 示例

        写入字符串到文件:

with open('example.txt', 'w') as file:file.write('Hello, World!')

        追加字符串到文件:

with open('example.txt', 'a') as file:file.write('\nHello again!')

        写入多行数据:

lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('example.txt', 'w') as file:file.writelines(lines)

6. 综合示例

        以下是一个综合示例,展示了如何打开文件、读取文件内容、写入文件内容以及使用 with open 语句。

# 读取文件内容
with open('example.txt', 'r') as file:content = file.read()print('File content before writing:')print(content)# 写入新内容到文件(覆盖模式)
with open('example.txt', 'w') as file:file.write('New content line 1\n')file.write('New content line 2\n')# 追加内容到文件
with open('example.txt', 'a') as file:file.write('Appended line 1\n')file.write('Appended line 2\n')# 再次读取文件内容
with open('example.txt', 'r') as file:new_content = file.read()print('File content after writing:')print(new_content)

        通过这些示例,您可以了解如何在 Python 中进行文件的读写操作,包括如何安全地打开和关闭文件,以及如何读取和写入文件内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

继承与多态2

2.5(杨.丹尼尔梁英文第11版P537:*13.12)(几何对象的面积求和)写一个方法,将数组中所有几何对象的面积求和。 方法签名是: 公共静态双求和区域(几何对象【】a) 编写一个测试程序&…

高速数据传输新纪元?ADT-Link领先推出USB4转PCIe 4.0桥接板

在科技飞速发展的今天,数据传输速度一直是推动行业进步的关键驱动力。最近,备受瞩目的硬件制造商ADT-Link宣布推出一款引领潮流的新产品——USB4转PCIe 4.0桥接板,这一创新设备势必会显著提升数据传输效率,为用户带来前所未有的高…

NI PXIe-7857R与PXIe-8842的区别

一、NI PXIe-7857R 类型: FPGA模块:基于FPGA的可编程I/O模块。 主要功能: FPGA处理:包含Xilinx Kintex-7 FPGA,支持自定义逻辑和处理。 I/O接口:提供丰富的模拟和数字I/O通道。 高速数据处理&#xff1a…

软件测试新手要达到一个什么水平才能找到一份9K的工作?

我的读者里有很多 软测 新人,新人是指正在学 测试 的、以及工作时间不长的年轻人,他们经常问我一个问题: 自学到什么程度才能找到一份还不错的测试工作? 今天我就从我自己面试新人的角度来回答一下,我会把面试的知识点…

查询指定会话免打扰

查询指定用户(requestId) 为指定会话(targetId)的设置的免打扰状态。 提示 该设置为用户级别设置。对应的设置接口详见设置指定会话免打扰。 请求方法 POST: https://数据中心域名/conversation/notification/get.json 频率限…

AVFrame结构体分析

AVFrame是FFmpeg中的一个核心数据结构,用于表示音频或视频的帧。它包含了一系列用于描述帧数据和元数据的字段。以下是对AVFrame结构体的详细分析,包括其主要字段及其作用。 AVFrame的定义 在FFmpeg的源代码中,AVFrame的定义可以在avframe.…

Nginx网页服务

nginx的配置: 1、全局块:全局配置,对全局生效; 2、events块:配置影响 Nginx 服务器与用户的网络连接; 3、http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置&#xf…

【Python编程实践2/3】Python图像处理模块(上)

目录 引言 目标 安装模块 Windows系统 macOS系统 路径 Windows路径 ​编辑macOS路径 windows路径报错 windows路径前的r 示例代码 windows快速查看路径 macOS快速查看路径 打开图片 展示图片 下节预告 总结 引言 欢迎各位大佬垂阅本篇Python实践博客&a…

【教学类-59-01】专注力视觉训练01(圆点百数图)

背景需求: 视觉训练的神奇效果,让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— 🔍视觉训练🔍 🔹想要提高宝宝的专注力,视觉训练是个绝佳方法! 🔹让宝宝仔细观察数字的路线&a…

微信小程序毕业设计-农场驿站平台系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

HoneyTrap蜜罐系统实践操作@FreeBSD

HoneyTrap介绍 HoneyTrap是一个可扩展的开源系统,用于运行、监控和管理蜜罐。 HoneyTrap蜜罐系统通过在网络中部署感应节点,实时感知周边网络环境,并将感应节点的日志进行实时存储和可视化分析,从而实现对网络环境中威胁情况的感…

Honor of Kings 2024.03.29 Ban for 3 day

我又被举报消极然后禁赛 都说了别选蔡文姬,对面三个肉,非要选个软辅助 吐槽下这游戏策划:游戏体验感越来越差,公正也很差 对说了对面4个法师,就是不出魔抗,把把都是0-N开局,到底谁消极啊&#x…

stable Diffusion缺失模型补充地址

Hires. fix 8x_NMKD-Superscale https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/8x_NMKD-Superscale_150000_G.pth 放置位置: \models\ESRGAN

【工具使用】在vscode中用python绘图

安装拓展Jupyter Keymap 然后重启vscode在代码之前加上这个代码,利用jupyter一行一行运行 # %%点击Run Cell即可运行 # %% import matplotlib.pyplot as plt# 提供的数据 data [0.02856750446367257, 0.248564674096589, 0.1645266594124048, 0, 0.375108941955725…

智能台灯系统之哪种调光方式更节能?

在节能方面,不同的调光方式有不同的表现。 PWM调光通过反复开关驱动器来控制LED灯的实际输出功率,以达到照明调光的目的。这种方式能够在最小电流和最大电流之间进行频繁的切换,从而调节照明灯具的亮度。由于LED照明光源仅处于接通或关断两种…

通关!游戏设计之道Day18

过场动画,或者说根本没人看的东西 过场动画是一系列的动画或实时的动作序列,用来推进剧情制造大场面,烘托气氛,展示对话和角色成长,以及显现在某些情况下被玩家忽略的相关线索。 过场动画是一把双刃剑,一方…

二叉树链式结构的前序_中序_后续_层序遍历【详细图解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

Excel 导入

依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency> service 读取excel文件的行数据 DataExcelListener<DeviceTemplateExcel> listener new…

MFC CList<CRect, CRect> m_listRect;的用法

CList<CRect, CRect&> 是 MFC&#xff08;Microsoft Foundation Classes&#xff09;中定义的一个双向链表模板类&#xff0c;用于存储 CRect 对象。在使用 CList 时&#xff0c;你可以执行多种操作&#xff0c;比如添加、移除、查找和遍历元素。以下是一些常见的用法…

SAP 生产订单报工函数BAPI_PRODORDCONF_CREATE_TT不返回报错信息

最近财务一直反馈MES报工的数据都没有成本,然后去查看原因发现是财务当月的KP26的价格没有进行维护,导致没有收集到工单的报工成本。 但是在前台操作CO11 报工的时候,系统会给出报错的信息 但是我们在调用函数BAPI_PRODORDCONF_CREATE_TT的时候,系统并没有返回报错的信息…