18_Python文件操作

news2024/11/15 4:34:55

在这里插入图片描述

计算机中的文件

文件是存储在计算机上的数据集合,它可以是文本、图片、音频、视频或其他任何类型的数据。

  • 在计算机系统中,文件通常用来长期保存信息。
    • 文本文件:一种以字符编码(如ASCII、UTF-8、UTF-16等)的形式存储数据的文件。这些文件通常包含人类可读的字符,如字母、数字、标点符号和其他符号。
    • 二进制文件:一种以二进制编码形式存储数据的文件,它包含的数据不是以字符形式直接表示的,而是以0和1的二进制形式表示。

文件处理步骤

  • 打开文件
  • 读取、写入
  • 关闭文件
# 打开文件
f = open(file="./example1.txt")
# 读取文件
data = f.read()
# 关闭文件
f.close()
print(data)
# 打开文件
f1 = open(file="./example2.txt",mode="w")
# 写入文件,返回值是写入的字符长度。
f1.write(data)
# 关闭文件
f1.close()
# 防止打开文件过程中出错,加上 try ... except
try:
    f1 = open(file="./b.txt",mode="w")
    # 写入文件
    f1.write(data)
finally:
    # 不管是否报错,都关闭文件。
    f1.close()

获取文件对象

在Python中,open() 函数用于打开一个文件,并返回一个文件对象,该对象可用于读取或写入文件内容。

  • open(file,mode,encoding)
    • file: 这是第一个参数,表示要打开的文件的路径。它是必须得,它可以是一个相对路径或绝对路径。
      • 相对路径:以当前文件目录为参照。
        • 当前目录: example.txt 表示当前目录下有一个example.txt文件。
        • 下级目录: subfolder/data.csv:这表示在当前目录中,有一个名为 subfolder 的子目录,而 data.csv 文件位于该子目录中。
        • 上级目录:../images/photo.jpg:表示在当父目录中,有一个名为 images 的目录,而 photo.jpg 文件位于该目录中。
      • 绝对路径:以盘符开头的路径。
    • mode: 这是第二个参数,指定文件打开的模式。它是可选的,如果省略,默认模式是 ‘r’(读取模式)。常见的模式:
      • ‘r’: 只读模式(默认)。如果文件不存在,会抛出 FileNotFoundError。
      • ‘w’: 写入模式。如果文件已存在,则将其覆盖;如果文件不存在,将创建一个新文件。
      • ‘x’: 独占创建模式。如果文件已存在,则抛出 FileExistsError;否则,创建一个新文件。
      • ‘a’: 追加模式。如果文件已存在,写入的数据会被添加到文件的末尾;如果文件不存在,将创建一个新文件。
      • ‘b’: 二进制模式。与上述模式结合使用,如 ‘rb’, ‘wb’, ‘ab’ 等。
      • ‘t’: 文本模式(默认)。与上述模式结合使用,如 ‘rt’, ‘wt’, ‘at’ 等。
    • encoding: 这是第三个参数,指定文件的编码格式。它也是可选的,默认编码通常是平台相关的。当打开一个文本文件时,这个参数非常有用,特别是在处理非ASCII字符时。常见的编码格式:
      • ‘utf-8’: 适用于多种语言的国际编码。
      • ‘utf-16’: 一种支持更多字符集的编码,通常用于处理特殊字符。
      • ‘ascii’: 仅支持ASCII字符集的编码。
      • ‘latin-1’, ‘iso-8859-1’: 西欧语言常用的编码。

以下是一个使用 open() 函数的示例,打开一个名为 example.txt 的文件,以文本模式读取,并指定使用 utf-8 编码:

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

在这个示例中,如果 example.txt 文件存在,它将以只读模式打开,并且假设文件内容是以 utf-8 编码的。使用 with 语句确保文件在操作完成后会被正确关闭。

编码(Encoding)

编码是将字符串(str类型)转换成字节序列(bytes类型)的过程。这通常在需要将字符串写入文件或通过网络发送时进行。

  • 语法:str.encode(encoding=‘utf-8’, errors=‘strict’)
  • 参数
    • encoding: 指定要使用的编码(如 ‘utf-8’, ‘ascii’, ‘latin-1’ 等)。
    • errors: 指定处理编码错误的策略(如 ‘strict’, ‘ignore’, ‘replace’ 等)。
text = "Hello, World!"
encoded_text = text.encode(encoding='utf-8')
print(encoded_text)  # 输出:b'Hello, World!'

解码(Decoding)

解码是将字节序列(bytes类型)转换回字符串(str类型)的过程。这通常在从文件读取或从网络接收数据后进行。

  • 语法:bytes.decode(encoding=‘utf-8’, errors=‘strict’)
  • 参数
    • encoding: 指定字节序列使用的编码。
    • errors: 指定处理解码错误的策略。
encoded_text = b'Hello, World!'
decoded_text = encoded_text.decode(encoding='utf-8')
print(decoded_text)  # 输出:Hello, World!

编码解码注意事项

  • 编码和解码必须匹配:编码时使用的编码格式和解码时使用的编码格式必须相同,否则可能会导致数据损坏或错误。
  • 错误处理:在编码和解码过程中可能会遇到无法处理的字符或字节序列。通过设置 errors 参数,可以指定如何处理这些错误(例如,忽略它们或用特殊字符替换)。
  • 默认编码:在Python 3中,默认的字符串编码是UTF-8,它支持多种语言的字符。

理解编码和解码是处理文本数据时非常重要的,尤其是在国际化和多语言环境中。正确地处理编码可以避免乱码问题,并确保数据的一致性和可靠性。

读取文件的方式

逐行读取

如果你想逐行处理文件,可以使用readline()或迭代文件对象。

使用readline()

with open('example.txt', 'r') as file:
    line = file.readline()
    while line:
        print(line, end='')  # 使用end=''避免重复打印换行符
        line = file.readline()

迭代文件对象

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

读取所有行到列表

使用readlines()方法可以将文件的所有行读取到一个列表中。

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

使用with语句以外的读取方式

虽然不推荐,但你也可以不使用with语句来读取文件。在这种情况下,你需要确保在操作完成后手动关闭文件。

file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()  # 手动关闭文件

读取特定数量的字符或字节

你可以使用read(size)方法来读取文件中的特定数量的字符或字节。

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

写入文件的方式

使用 write() 方法

最简单的方式是使用 write() 方法将字符串写入文件。如果文件不存在,它将自动创建。

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

追加内容到文件

如果你想在文件末尾追加内容而不是覆盖它,可以使用 ‘a’ 模式。

with open('example.txt', 'a') as file:
    file.write('\nThis is a new line.')

写入多行

你可以通过在字符串中使用换行符 \n 来写入多行。

with open('example.txt', 'w') as file:
    file.write('Line 1\nLine 2\nLine 3')

使用 writelines() 方法

如果你想写入一个字符串列表,可以使用 writelines() 方法。

lines = ['Line 1\n', 'Line 2\n', 'Line 3']
with open('example.txt', 'w') as file:
    file.writelines(lines)

写入二进制数据

要写入二进制数据,你应该使用 ‘wb’ 模式。

with open('example.bin', 'wb') as file:
    file.write(b'\x00\x01\x02')

注意事项

  • 使用 with 语句是一种安全的方式来处理文件,因为它会在代码块执行完毕后自动关闭文件。
  • 确保你有写入文件的权限。
  • 在写入之前,考虑是否需要备份原始文件。
  • 如果写入的是文本文件,确保指定正确的编码格式以避免乱码。

以上就是Python中写入文件的一些常见方式。根据你的需求选择合适的方法。

附件

本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89785190

如有问题请留言。

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

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

相关文章

C++离线查询

前言 C算法与数据结构 打开打包代码的方法兼述单元测试 概念及原理 离线算法( offline algorithms),离线计算就是在计算开始前已知所有输入数据,输入数据不会产生变化,且在解决一个问题后就要立即得出结果的前提下进行的计算。 通俗的说&a…

深入浅出:Eclipse 中配置 Maven 与 Spark 应用开发全指南

Spark 安装配置 1.在 Eclipse 中配置 Maven Eclipse 中默认自带 Maven 插件,但是自带的 Maven 插件不能修改本地仓库,所 以通常我们不使用自带的 Maven ,而是使用自己安装的,在 Eclipse 中配置 Maven 的 步骤如下:…

多模态大模型应用开发技术学习

前篇提到多模态模型应用是未来的应用方向,本篇就聊聊技术学习方面的内容。 应用场景 多模态大模型技术的应用场景非常广泛,涵盖了从日常生活到专业领域的各个方面。以下是一些主要的应用场景: 办公自动化:多模态大模型可以用于…

K8s 之微服务的定义及详细资源调用案例

什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去? 需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。借助Service,应用可以实现服务发现和负载均衡。service默认只支持4层负载均衡能力&…

指针 (七)

一 . 回调函数 什么是回调函数呢?就是说我们将函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,这个被调用的函数就是回调函数。回调函数并不是由该函数的实现方直接调用&#xff0c…

MySQL函数介绍--日期与时间函数(二)

我相信大家在学习各种语言的时候或多或少听过我们函数或者方法这一类的名词,函数在计算机语言的使用中可以说是贯穿始终,那么大家有没有思考过到底函数是什么?函数的作用又是什么呢?我们为什么要使用函数?其实&#xf…

移动技术开发:RecyclerView瀑布流水果列表

1 实验名称 RecyclerView瀑布流水果列表 2 实验目的 掌握RecyclerView控件的实现方法和基本应用 3 实验源代码 布局文件代码&#xff1a; activity_main&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android&q…

【学习笔记】手写 Tomcat 五

目录 一、优化 Servlet 创建一个抽象类 继承抽象类 二、三层架构 业务逻辑层 数据访问层 1. 在 Dao 层操作数据库 2. 调用 Dao 层&#xff0c;实现业务逻辑功能 3. 调用 Service 层&#xff0c;响应数据 测试 三、数据库连接池 1. 手写数据库连接池 2. 创建数据库…

C语言题目之单身狗2

文章目录 一、题目二、思路三、代码实现 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 二、思路 第一步 在c语言题目之打印单身狗我们已经讲解了在一组数据中出现一个单身狗的情况&#xff0c;而本道题是出现两个单身狗的情况。根据一个数…

当Navicat报错 Can not connect to MySQL server的解决方法!

今天运行数据库时突然弹出一个error&#xff1a; 原因&#xff1a;MySQL的服务没有打开&#xff0c;需要检查MySQL的开启状态即可。 具体做法&#xff1a; 1.右键“开始”&#xff0c;点击“计算机管理” 2. 选择“服务和应用程序”&#xff0c;并点击“服务” 3.在服务中找…

ESP32-WROOM-32 [创建AP站点-TCP服务端-数据收发]

简介 ESP32 创建TCP Server AP站点&#xff0c; PC作为客户端连接站点并收发数据 指令介绍 注意,下面指令需要在最后加上CRLF, 也就是\r\n(回车换行) ATRESTORE // 恢复出厂设置 ATCWMODE2 // 设置 Wi-Fi 模式为 softAP ATCIPMODE0 // 需要数据传输模式改为0&#xff0c; 普通…

Cesium 绘制可编辑点

Cesium Point点 实现可编辑的pointEntity 实体 文章目录 Cesium Point点前言一、使用步骤二、使用方法二、具体实现1. 开始绘制2.绘制事件监听 三、 完整代码 前言 支持 鼠标按下 拖动修改点&#xff0c;释放修改完成。 一、使用步骤 1、点击 按钮 开始 绘制&#xff0c;单…

河钢数字PMO牛红卫受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 河钢数字技术股份有限公司项目管理部PMO牛红卫受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“从技术到领导力——项目经理成长进阶之道”。大会将于10月26-27日在北京举办&…

知情人称,丹尼尔克雷格在卸任“007”以后他和蕾切尔薇兹的婚姻“产生了奇效”

丹尼尔克雷格、蕾切尔薇兹 虽然丹尼尔克雷格 (Daniel Craig) 因出演詹姆斯邦德 (James Bond) 而成为全球最耀眼的明星之一&#xff0c;实现了自己以及很多人的梦想&#xff0c;但知情人称他与蕾切尔薇兹 (Rachel Weisz) 的婚姻实际上正因此而陷入困境&#xff1b;但现在&#…

C# winforms DataGridView设置数据源自动显示表格

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

高效打造知识图谱,使用LlamaIndex Relik实现实体关联和关系抽取

大家好&#xff0c;文本信息转化为知识图谱的技术&#xff0c;自问世以来一直是研究界的宠儿。大型语言模型&#xff08;LLMs&#xff09;的兴起让这个领域受到更多关注&#xff0c;但LLMs的成本之高令人却步。然而通过对小型模型微调优化&#xff0c;可以找到一种更经济高效的…

没有 Microsoft Wi-Fi Direct Virtual Adapter #2 导致无法打开热点

我的环境 电脑打不开热点 系统 win11 64位 品牌 hp 笔记本电脑 解决方法&#xff1a; https://answers.microsoft.com/zh-hans/windows/forum/all/%E7%A7%BB%E5%8A%A8%E7%83%AD%E7%82%B9%E6%97%A0/9285620a-71d9-4671-b125-4cd607b6371a 解决 &#x1f613; 扫描一下设…

读构建可扩展分布式系统:方法与实践12分布式数据库案例

1. Redis 1.1. 2009年首次发布 1.1.1. 更注重原始性能和简单性&#xff0c;而不是数据安全性和一致性 1.2. 主要吸引力在于它能够同时充当分布式缓存和数据存储 1.3. 维护一个内存中的数据存储&#xff0c;也称为数据结构存储(data structure store) 1.4. 配置Redis将每个…

每日学习一个数据结构-Trie树(字典树)

文章目录 定义节点结构根节点插入操作查找操作删除操作特点应用示例 “Trie”树&#xff0c;又称为前缀树或字典树&#xff0c;是一种专门用于存储字符串的数据结构。它在许多应用程序中都非常有用&#xff0c;特别是在那些需要高效查找、插入和删除字符串的应用场景中。下面是…

2024年华为杯数学建模E题-高速公路应急车道启用建模-基于YOLO8的数据处理代码参考(无偿分享)

利用YOLO模型进行高速公路交通流量分析 识别效果&#xff1a; 免责声明 本文所提供的信息和内容仅供参考。尽管我尽力确保所提供信息的准确性和可靠性&#xff0c;但我们不对其完整性、准确性或及时性作出任何保证。使用本文信息所造成的任何直接或间接损失&#xff0c;本人…