18_Python文件操作

在这里插入图片描述

计算机中的文件

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

  • 在计算机系统中,文件通常用来长期保存信息。
    • 文本文件:一种以字符编码(如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 = 10content = 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.xdnf.cn/news/1543097.html

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

相关文章

高速滑环在摄像领域的应用分析

高速滑环在现代摄像技术中扮演着至关重要的角色。随着摄像设备向高速度、高精度的方向发展,传统的信号传输方式已无法满足需求。高速滑环作为连接旋转部件与固定部件的重要组件,能够有效地传递电信号和数据,为摄像设备的高效运转提供保障。 …

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在Arcmap,如何把图层属性表以动态表格的形式插入到布局页面? 众所周知,在属性表的左上角,有个功能是“把表添加到布局”,就可以把属性表以表格的形式添加到布局页面。 但是今天要说的是并不是这个,今天要说的是&…

神经网络(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络:单层感知机1.3两层神经网络:多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

SSCMS 插件示例 一插件创建及插件菜单

SSCMS 插件示例下载 1、工程创建过程,如下图所示。 2、工程路径和工程命名,如下图所示。 bjxingch作者 IPluginCUDR插件名称 3、选择框架,如下图所示。 4、使用NuGet安装 SSCMS和Datory,如下图所示。

【软件工程】状态转换图 其他图形工具

状态转换图 一、定义 二、符号表示 其他图形工具 一、层次方框图 二、Warmer图 三、IPO图 例题 选择题

熟练的Java程序员:掌握核心技能,引领技术潮流

Java,作为一门成熟且广泛应用的编程语言,对于程序员来说,不仅是一种技能,更是一种职业态度的体现。一个熟练的Java程序员,应该具备哪些技术呢?本文将为您揭晓答案。 1. 扎实的Java基础 熟练掌握Java语言的…

《深入理解JAVA虚拟机(第2版)》- 第13章 - 学习笔记【终章】

第13章 线程安全与锁优化 13.1 概述 面向过程的编程思想 将数据和过程独立分开,数据是问题空间中的客体,程序代码是用来处理数据的,这种站在计算机角度来抽象和解决问题的思维方式,称为面向对象的编程思想。 面向对象的编程思想…

想从事大模型?一大波工作岗位等你选!

技术类岗位 您可从事:算法工程师,研发工程师。 管理类岗位 您可从事:AI项目经理、AI产品经理、AI销售、AI解决方案。 01 技术类岗位 算法工程师 大模型算法工程师的职位通常要求求职者具备以下几方面的能力和经验。 通用技能教育背景…

大健康管理系统|健康综合咨询问诊平台设计与实现(源码+数据库+文档)

大健康管理系统目录 目录 健康综合咨询问诊平台设计与实现 一、前言 二、系统功能设计 三、系统实现 5.1用户信息管理 5.2 医生信息管理 5.3科室信息管理 5.1新闻信息管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示: 五、核心代码 六、论文…

干货|生成式人工智能大模型备案详细办理资料清单

我以刚通过的大模型备案提交的材料清单给大家详细讲一讲 刚通过的大模型备案材料清单 1、安全评估报告 安全评估报告是大模型备案过程中的一个重要关键部分,它需由专业机构或团队完成,全面评估大模型在语料处理、模型训练、服务提供等环节中的安全性。…

vue3ScrollSeamless滚动如何给子元素添加点击事件:事件委托

页面布局如上截图 下面是方法 function parentClick(e) {if (e.target.tagName A) {router.push({path: /noticeDetails,query: {id: e.target.dataset.eid}});} }使用的时候,可以打印一下方法里面的e,加深理解

基于51单片机的电机控制和角度检测

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采用滑动变阻器连接ADC0832数模转换器模拟角度传感器,然后通过LCD1602显示数值,然后按键按下不动,电机正转,松开停止。第二…

红外绝缘子数据集

红外绝缘子数据集,绝缘子旋转框检测 电气工程专业研究可用 电力领域稀有红外图像数据集 红外图像总数5000多张,txt格式,可直接用于yolo训练 红外绝缘子数据集 (Infrared Insulator Dataset, IID) 数据集描述 IID是一个专为电气工程专业研究…

react中解析markdown文本

背景 产品想把从某个地方复制出来的markdown文本,保存下来,并且在前端这边展示的时候,按照对应的格式展示 工具 markedhighlight.jsmarked-highlight 原来的marked版本,是可以直接处理高亮配置,但是后续更新为了轻量…

耦合微带线单元的网络参量和等效电路公式推导

文档下载链接:耦合微带线单元的网络参量和等效电路资源-CSDN文库https://download.csdn.net/download/lu2289504634/89583027笔者水平有限,错误之处欢迎留言! 一、耦合微带线奇偶模详细推导过程 二、2,4端口开路 三、2端口短路、3端口开路 四…

Apple Intelligence预计会在iOS 18.1和iOS 18.4之间按此顺序推出

本月早些时候 iOS 18 已公开发布,但首批 Apple Intelligence 功能要等到 10 月份 iOS 18.1 发布后才可以使用。Apple Intelligence 功能将继续在 iOS 18.2 及更高版本中推出,预计路线图如下,出自 Apple 网站和传闻。 Apple Intelligence 需要…

electron-vite使用vue-i18n,ts 检查报错上不存在属性“$t”

问题: electron-vite使用vue-i18n,ts类型检查报错,但实际运行没有问题 解决方案: 1. 在electron-vite渲染端代码src目录下,增加 vue-i18n.d.ts 文件,添加如下内容: /* eslint-disable */ im…

【d47_2】【Java】【力扣】1791.找出星型图的中心节点

思路 直接判断 edges[0][0] edges[0][1] edges[1][0] edges[1][1] 谁重复了 例如&#xff1a; [ [1,2] [2,3] ....],那么中心节点一定是2 代码 class Solution {public int findCenter(int[][] edges) {for (int i0;i<1;i){if (edges[1][0]edges[0][i]) {return edg…

Java/Spring项目的包开头为什么是com?

Java/Spring项目的包开头为什么是com&#xff1f; 下面是一个使用Maven构建的项目初始结构 src/main/java/ --> Java 源代码com.example/ --->为什么这里是com开头resources/ --> 资源文件 (配置、静态文件等)test/java/ --> 测试代码resourc…

3D建模:Agisoft Metashape Professional 详细安装教程分享 Mac/win

Agisoft Metashape中文版&#xff08;以前称为 PhotoScan&#xff09;是一款独立软件产品&#xff0c;可对数字图像进行摄影测量处理并生成 3D 空间数据&#xff0c;用于 GIS 应用程序、文化遗产文献和视觉效果制作以及各种比例的物体的间接测量。 明智地实施数字摄影测量技术…