Python 文件基础科普与文件打开技术详解【第117篇—文件打开技术】

Python 文件基础科普与文件打开技术详解

在Python编程中,文件操作是一项基础而重要的任务。无论是读取数据、写入文件还是进行其他文件处理操作,都需要对文件基础知识有一定的了解。在本文中,我们将首先介绍Python文件的基础概念,然后深入探讨文件打开的技术,附带代码实例和详细解析。

IMG_20231006_183505

文件基础科普

文件的概念

文件是存储在计算机上的数据集合,可以包含文本、图像、音频等各种信息。在Python中,文件可以分为文本文件和二进制文件。文本文件是由字符组成,而二进制文件则包含了更为复杂的数据格式。

文件路径

文件路径是文件在计算机中的位置表示。在不同的操作系统中,文件路径的表示方式可能有所不同。常见的文件路径包括绝对路径和相对路径。绝对路径从根目录开始,而相对路径是相对于当前工作目录的路径。

文件打开技术

打开文件的基本语法

在Python中,使用open()函数来打开文件。open()函数接受文件名和打开模式作为参数,返回一个文件对象。

file = open('example.txt', 'r')

上述代码以只读模式(‘r’)打开名为’example.txt’的文件,并将文件对象赋值给变量file

文件打开模式

  • 'r':只读模式,用于读取文件内容。
  • 'w':写入模式,用于写入文件内容。如果文件存在,会清空文件内容;如果文件不存在,会创建新文件。
  • 'a':追加模式,用于在文件末尾追加内容。如果文件不存在,会创建新文件。
  • 'b':二进制模式,用于处理二进制文件,例如图片或音频文件。

关闭文件

使用完文件后,应该及时关闭以释放系统资源。

file.close()

代码实例

接下来,让我们看一个完整的文件打开和关闭的代码实例:

# 打开文件
file = open('example.txt', 'w')# 写入内容
file.write('Hello, this is an example.')# 关闭文件
file.close()

代码解析

  1. 使用open()函数打开文件,指定文件名为’example.txt’,打开模式为写入模式(‘w’)。
  2. 通过write()方法向文件中写入文本内容。
  3. 使用close()方法关闭文件。

以上是一个简单的文件写入示例,通过类似的方式,可以使用不同的打开模式实现文件的读取、追加等操作。

通过深入了解文件基础知识和文件打开技术,我们可以更灵活地处理文件操作,为实际项目中的数据处理提供强大的支持。在实际应用中,请根据需求选择合适的文件打开模式,并注意及时关闭文件以避免资源泄漏。希望本文对你理解Python文件操作提供了帮助。

文件读取与异常处理

读取文件内容

在前述示例中,我们演示了文件写入操作。现在,让我们看一下如何读取文件内容。使用只读模式(‘r’)打开文件,然后可以通过read()方法读取文件的全部内容:

# 打开文件
file = open('example.txt', 'r')# 读取文件内容
content = file.read()
print(content)# 关闭文件
file.close()

逐行读取文件

如果文件很大,逐行读取更为高效。使用readline()方法可以逐行读取文件:

# 打开文件
file = open('example.txt', 'r')# 逐行读取文件内容
line = file.readline()
while line:print(line.strip())  # 使用strip()方法去除行尾换行符line = file.readline()# 关闭文件
file.close()

异常处理

文件操作可能引发异常,例如文件不存在、权限不足等。为了增强代码的健壮性,应该使用tryexcept块进行异常处理:

try:file = open('example.txt', 'r')content = file.read()print(content)file.close()
except FileNotFoundError:print("文件不存在")
except PermissionError:print("没有文件访问权限")
except Exception as e:print(f"发生了未知错误:{e}")
finally:if 'file' in locals() and not file.closed:file.close()

上述代码使用了tryexceptfinally块,确保无论发生什么异常,都能正确地关闭文件。

文件写入进阶与上下文管理器

文件写入进阶

在前述写入文件的示例中,我们使用了write()方法将内容写入文件。现在,让我们看一下如何更灵活地进行文件写入,并探讨一些高级的写入技巧。

使用with语句

Python提供了with语句,可以更方便地管理文件的打开和关闭。使用with语句,无需手动调用close()方法,系统会在离开with块时自动关闭文件。

# 使用with语句写入文件
with open('example.txt', 'w') as file:file.write('Hello, this is an example.')
写入多行

如果需要写入多行内容,可以使用writelines()方法。该方法接受一个字符串列表,每个字符串代表一行文本。

# 使用writelines写入多行
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('example.txt', 'w') as file:file.writelines(lines)

上下文管理器

上下文管理器是一个支持with语句的对象,用于管理资源的获取和释放。在文件操作中,open()函数返回的文件对象本身就是一个上下文管理器,但也可以使用contextlib模块的contextmanager装饰器自定义上下文管理器。

from contextlib import contextmanager@contextmanager
def custom_context_manager():# 在进入with语句块时执行的代码print("Entering the context")yield  # 生成器的yield语句之前的代码为__enter__方法# 在离开with语句块时执行的代码print("Exiting the context")# 使用自定义上下文管理器
with custom_context_manager():print("Inside the context")

在上述例子中,进入和退出上下文时会打印相应的消息。yield语句之前的代码为__enter__方法,之后的代码为__exit__方法。

文件读写二进制数据

在处理二进制文件时,需要以二进制模式(‘rb’或’wb’)打开文件。以下是一个读取和写入二进制文件的示例:

# 读取二进制文件
with open('binary_data.bin', 'rb') as file:binary_content = file.read()print(binary_content)# 写入二进制文件
binary_data = b'\x48\x65\x6C\x6C\x6F'  # ASCII编码的"Hello"
with open('binary_data.bin', 'wb') as file:file.write(binary_data)

在读取二进制文件时,使用read()方法获取二进制数据。在写入二进制文件时,通过write()方法写入二进制数据。

文件定位与截断

在文件处理过程中,有时我们需要在文件中定位到特定位置进行读取或写入操作。此外,文件截断是一种在指定位置截断文件内容的操作。让我们一起深入了解这两个方面的技术。

文件定位

使用seek()方法可以在文件中定位到指定的位置。seek(offset, whence)接受两个参数,offset表示偏移量,whence表示基准位置。基准位置有三个值:

  • 0:从文件开头计算偏移量(默认值)。
  • 1:从当前位置计算偏移量。
  • 2:从文件末尾计算偏移量。
# 文件定位示例
with open('example.txt', 'r') as file:file.seek(5)  # 移动到文件第6个字节处content = file.read()print(content)

文件截断

使用truncate()方法可以截断文件内容,保留指定长度的内容。如果不传递参数,则截断当前位置之后的内容。

# 文件截断示例
with open('example.txt', 'r+') as file:file.seek(10)  # 定位到第11个字节file.truncate()  # 截断文件,保留前10个字节content = file.read()print(content)

在上述示例中,文件被截断后,读取的内容只包括前10个字节。

示例:在文件中插入内容

结合文件定位和截断的技术,我们可以在文件中间插入内容。以下是一个在指定位置插入文本的示例:

# 在文件中间插入内容示例
with open('example.txt', 'r+') as file:position = 5content = file.read()file.seek(position)file.write("Inserted Text ")file.write(content)

在这个示例中,我们首先读取文件内容,然后将文件指针移动到指定位置,插入新的文本,最后写入原始内容。这样就在文件中间成功插入了内容。

文件和目录操作

除了基本的文件读写和定位技术外,Python还提供了丰富的文件和目录操作功能。这包括检查文件/目录是否存在、创建目录、删除文件/目录等操作。让我们一起学习这些常用的文件和目录管理技术。

检查文件/目录是否存在

在进行文件和目录操作之前,通常需要先检查它们是否存在。使用os模块的path模块可以方便地进行这些检查。

import os# 检查文件是否存在
file_path = 'example.txt'
if os.path.exists(file_path):print(f"文件 '{file_path}' 存在")
else:print(f"文件 '{file_path}' 不存在")# 检查目录是否存在
directory_path = 'my_directory'
if os.path.exists(directory_path):print(f"目录 '{directory_path}' 存在")
else:print(f"目录 '{directory_path}' 不存在")

创建目录

使用os模块的mkdir()方法可以创建新的目录。

import os# 创建目录
new_directory = 'my_new_directory'
os.mkdir(new_directory)
print(f"目录 '{new_directory}' 已创建")

删除文件/目录

使用os模块的remove()方法可以删除文件,使用rmdir()方法可以删除目录。需要注意,删除目录时目录必须为空,否则会引发OSError

import os# 删除文件
file_to_delete = 'file_to_delete.txt'
os.remove(file_to_delete)
print(f"文件 '{file_to_delete}' 已删除")# 删除目录
directory_to_delete = 'directory_to_delete'
os.rmdir(directory_to_delete)
print(f"目录 '{directory_to_delete}' 已删除")

遍历目录内容

使用os模块的listdir()方法可以获取目录中的文件和子目录列表。

import os# 遍历目录内容
directory_path = 'my_directory'
contents = os.listdir(directory_path)print(f"目录 '{directory_path}' 中的内容:")
for item in contents:print(item)

示例:复制文件

结合文件读写和目录操作技术,我们可以实现文件的复制操作。

import shutil# 复制文件
source_file = 'source.txt'
destination_file = 'destination.txt'
shutil.copy(source_file, destination_file)
print(f"文件 '{source_file}' 已复制到 '{destination_file}'")

在这个示例中,使用shutil模块的copy()方法实现了文件的复制操作。

总结

本文深入介绍了Python中关于文件操作的基础知识和高级技术,以及文件和目录管理的一些常见操作。首先,我们学习了文件的基本概念、路径表示方法以及不同的文件打开模式。随后,我们详细探讨了文件读取、写入、截断、定位等方面的技术,并介绍了上下文管理器的使用。文件的二进制操作也得到了涉及,增加了对处理图像、音频等二进制文件的能力。

进一步,我们讨论了文件和目录的存在性检查、创建、删除,以及遍历目录内容的方法。这些操作为文件系统的组织和管理提供了灵活性。最后,通过一个文件复制的示例,我们展示了如何结合不同的技术完成更复杂的任务。

通过学习本文,读者应该能够对Python中文件处理的基本知识和高级技术有一个全面的了解。文件操作是编程中常见而重要的一部分,对于数据处理和项目开发具有重要意义。希望本文能够激发你对Python文件操作的兴趣,并为你在实际项目中的文件处理提供了实用的技巧和方法。

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

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

相关文章

哈希专题 - leetcode 1. 两数之和 - 简单难度

leetcode 1. 两数之和 leetcode 1. 两数之和 简单难度 哈希1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 1. 两数之和 简单难度 哈希 1. 题目详情 给定一个整数数组 nums 和一个整数目标值 target…

抽奖小程序怎么在线制作_引爆你的营销活动

抽奖小程序,轻松在线制作,引爆你的营销活动! 在如今数字化时代,营销方式层出不穷,如何快速吸引用户眼球,提高品牌知名度,成为每个企业关注的焦点。今天,我要向大家介绍一款神奇的工…

用xshell7连接服务器,读取后台日志

有时候前端需要读取一些后台日志,比如,有时候接一些验证码啥的 或者有时候前后端不分离时,前端上线项目 先讲一下怎么用密码方式连接服务器 密码方式连接服务器 第一步,安装xshell,在新建会话中填写主机&#xff0…

Linux 下安装 Git

Linux 下安装 Git 1 参考2 安装2.1 通过 yum方式安装(不推荐)2.2 通过源码编译安装(推荐) 3 配置SSH 1 参考 Linux 下安装 Git 2 安装 2.1 通过 yum方式安装(不推荐) 在Linux上安装git仅需一行命令即可…

11 |「异步任务与多线程」

前言 实践是最好的学习方式,技术也如此。 文章目录 前言一、同步和异步的概念1、同步和异步任务2、线程 二、Android 多线程与 Handler 机制1、分类2、原则3、Handler 机制1)问题(背景)2)Handler 异步通信系统3&#x…

重塑生产格局:新质生产力引领下的新型工业操作系统和工业母机创新动向

新质生产力是创新起主导作用,摆脱传统经济增长方式、生产力发展路径,具有高科技、高效能、高质量特征,符合新发展理念的先进生产力质态。 **风口情报:**近日,中央经济工作会议首次提出“发展新质生产力”;…

作业1-32 P1059 [NOIP2006 普及组] 明明的随机数

题目 思路 根据题意&#xff0c;需要将读入的数据排序&#xff0c;去重。 参考代码 #include<bits/stdc.h> using namespace std; int n,a[5000],k;int main() {while(cin>>n){//读入数据for(int i0;i<n;i)cin>>a[i];sort(a,an);//排序int b[5000];in…

深度学习需要掌握哪些数学基础?

《深度学习的数学》这本书再合适不过了。作者罗纳德.T.纽塞尔&#xff08;Ronald T. Kneusel&#xff09;&#xff0c;拥有超过 20年的机器学习行业经验。 本书适合有一定深度学习基础、了解Python编程语言的读者阅读&#xff0c;也可作为用于拓展深度学习理论的参考书。 为什么…

CKA考试必备:解锁Pod封装多容器的高级技巧!

往期精彩文章 : 提升CKA考试胜算&#xff1a;一文带你全面了解RBAC权限控制&#xff01;揭秘高效运维&#xff1a;如何用kubectl top命令实时监控K8s资源使用情况&#xff1f;CKA认证必备&#xff1a;掌握k8s网络策略的关键要点提高CKA认证成功率&#xff0c;CKA真题中的节点维…

【MySQL】用户管理 -- 详解

如果我们只能使用 root 用户&#xff0c;这样存在安全隐患。这时就需要使用 MySQL 的用户管理。 一、 用户 1、用户信息 MySQL 中的用户都存储在系统数据库 MySQL 的 user 表中。 字段解释&#xff1a; host&#xff1a;表示这个用户可以从哪个主机登陆&#xff0c;如果…

【三】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

数据库学生选择1122 数据库展示 course表展示 SC表展示 student表展示 数据库学生选课1122_1 第一题 第二题 第三题 第四题 第五题 数据库学生选课1122_2 第六题 第七题 第八题 第九题 第十题 结尾 最后&#xff0c;感谢您阅读我的文章&#xff0c;希望这些内容能够对您有所启…

实践:qemu 运行 linux riscv with AIA(APLICIMSIC)

RISCV架构 Linux AIA支持 目标&#xff1a;在 Qemu 中运行一个支持 riscv aia 的 linux 翻译参考自&#xff1a;https://lwn.net/Articles/963231/ 文章日期&#xff1a;2024年2月22日&#xff0c;星期四&#xff08;截至2024年3月&#xff0c;最新&#xff09; 这个网站里在不…

Spring Boot工程集成验证码生成与验证功能教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

《Vite 报错》ReferenceError: module is not defined in ES module scope

ReferenceError: module is not defined in ES module scope 解决方案 postcss.config.js 要改为 postcss.config.cjs&#xff0c;也就是 .cjs 后缀。 原因解析 下图提示&#xff0c;packages.json 中的属性 type 设置为 module。所有 *.js 文件现在都被解释为 ESM&#xff…

电商店群系统的搭建需要用到的官方接口如何申请?

电商电子商务企业往往都会需要再很多平台上面铺货&#xff0c;上传商品。 高科技的今天&#xff0c;我们已经不需要手动一个个品去上传了。那通过官方接口&#xff0c;如何实现快速铺货呢&#xff1f; 1688官方开放平台的API接口类型众多&#xff0c;并不是所有的企业都能申请…

GitHub Pages部署静态页面

GitHub Pages是GitHub提供的静态页面托管服务&#xff0c;可以用来托管个人博客、项目文档等静态页面。GitHub Pages支持Jekyll&#xff0c;可以使用Jekyll构建博客&#xff0c;也可以使用其他静态页面生成器。现在GitHub Pages也在公测通过工作流部署静态页面&#xff0c;可以…

鸿蒙文章专题-2021年鸿蒙相关的文章废弃

#原因 至于为什么说2021年我的鸿蒙专栏的文章废弃了&#xff0c;只是说没有了参考意义&#xff0c;是因为鸿蒙4.0以前的版本语言从以Java为主过渡为以ArkTS为主。以前的Java版本的工程已经无法再使用了&#xff0c;后续的开发都必须以ArkTS开发语言为主。 其中而且整个项目结构…

三. 开发环境搭建

目录 一. Ubuntu 和 Windows 文件互传 1.1 VMware Tools 1.2 FileZilla 二. Ubuntu 下 NFS 和 SSH 服务开启 2.1 NFS 服务开启 ​编辑 2.2 SSH 服务开启 三. Ubuntu 交叉编译工具链安装 四. vscode的remote-ssh远程连接虚拟机 4.1 Windows的vscode安装 4.2 vscode远…

chatGPT的耳朵!OpenAI的开源语音识别AI:Whisper !

语音识别是通用人工智能的重要一环&#xff01;可以说是AI的耳朵&#xff01; 它可以让机器理解人类的语音&#xff0c;并将其转换为文本或其他形式的输出。 语音识别的应用场景非常广泛&#xff0c;比如智能助理、语音搜索、语音翻译、语音输入等等。 然而&#xff0c;语音…

专题1 - 双指针 - leetcode 11. 盛最多水的容器

leetcode 11. 盛最多水的容器 1. leetcode 11. 盛最多水的容器1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 1. leetcode 11. 盛最多水的容器 1. 题目详情 给定一个长度为 n 的整数数组 height 。有 n 条垂线…