掌握Python文件操作:从基础到高阶的全方位探索

 

在本篇博客中,我们将全面、深入地探讨Python中的文件操作。文件操作在Python编程中是不可或缺的一部分,它包含了打开、读取、写入和关闭文件等各种操作。我们将从基础的文件操作讲解到高级的文件处理技巧,以及如何优雅地使用Python进行文件操作。每一部分我们都会分享一些独特的用法,并且附有具体的示例代码和输出结果。在文章的最后,我们还将分享一些鲜为人知但非常实用的文件操作技巧。

基础文件操作:打开、读取、写入和关闭文件

Python使用内置的open()函数来打开一个文件,它返回一个文件对象,常用的模式如下:'r'表示读取,'w'表示写入(会先清空原有文件),'a'表示追加,'b'表示二进制模式。特别的,我们可以使用with关键字,这样当我们完成操作后,文件将自动关闭。

# 以读取模式打开一个文件
with open('file.txt', 'r') as file:content = file.read()
print(content)

当你运行这段代码,假设file.txt的内容是Hello, Python!,你会看到以下输出:

Hello, Python!

文件读取:细粒度控制

除了一次性读取整个文件,我们还可以以更小的单位来读取文件。这对于处理大文件时非常有用,可以有效控制内存的使用。

with open('file.txt', 'r') as file:while True:line = file.readline()if not line:breakprint(line, end='')

这段代码会逐行读取file.txt文件的内容并打印。其中,end=''是为了防止print函数在每次打印后都插入一个换行符,因为从文件中读取的每一行都已经带有一个换行符。

文件写入:内容追加与覆盖

我们使用写入模式('w')或追加模式('a')来写入文件。这里有一个小技巧:如果你的程序需要频繁写入文件,那么在写入时使用\n来换行会比使用write()函数后再使用write('\n')函数来插入新行更有效率。

with open('file.txt', 'a') as file:file.write('Hello, Python!\n')

这段代码会在file.txt文件的末尾追加一行Hello, Python!

更高级的文件处理:osshutil模块

Python的os模块和shutil模块为我们提供了更高级的文件操作功能,如重命名文件、删除文件、创建

目录、复制文件等。

import os
import shutil# 创建一个新的目录
os.mkdir('new_folder')# 重命名文件
os.rename('old.txt', 'new.txt')# 复制文件
shutil.copy2('src.txt', 'dst.txt')# 删除文件
os.remove('file_to_delete.txt')

运行这段代码会按顺序执行上述文件操作。

文件编码:处理不同编码格式的文件

在处理文件时,我们可能会遇到各种不同的编码格式,如UTF-8, ASCII, ISO-8859-1等。Python的open()函数允许我们通过encoding参数来指定文件的编码方式。

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

如果你尝试读取一个包含非ASCII字符的文本文件,但没有提供正确的编码参数,Python可能会抛出UnicodeDecodeError。在这种情况下,你需要知道文件的正确编码格式才能正确地读取文件。

# 尝试读取一个包含非ASCII字符的文件,但没有指定正确的编码格式
try:with open('file.txt', 'r') as file:content = file.read()
except UnicodeDecodeError:print("UnicodeDecodeError occurred!")

这段代码会捕获UnicodeDecodeError并打印一个错误消息。

文件异常处理:确保代码的健壮性

在文件操作中,我们可能会遇到各种异常情况,例如文件不存在、没有读取/写入权限等。我们可以使用Python的异常处理机制来捕获这些异常并作出相应的处理。

try:with open('nonexistent_file.txt', 'r') as file:content = file.read()
except FileNotFoundError:print('File does not exist!')
except PermissionError:print('No permission to read the file!')

这段代码会捕获FileNotFoundErrorPermissionError,并分别打印出相应的错误消息。

使用pickle进行对象序列化和反序列化

Python的pickle模块提供了将对象转换为一种可以存储到文件或在网络上传输的格式(这个过程称为序列化),以及从这种格式重新构造对象(这个过程称为反序列化)的功能。这是一种非常方便的方式来保存和加载Python对象。

import pickledata = {'name': 'John','age': 30,'pets': ['cat', 'dog']
}# 序列化并保存到文件
with open('data.pkl', 'wb') as file:pickle.dump(data, file)# 从文件加载并反序列化
with open('data.pkl', 'rb') as file:loaded_data = pickle.load(file)print(loaded_data)

运行这段代码,你会看到以下输出:

{'name': 'John', 'age': 30, 'pets': ['cat', 'dog']}

这就是原始的data字典对象。

文件路径处理

在处理文件路径时,Python的os.path模块提供了一系列函数来解析、构造和修改文件路径。这些函数都是跨平台的,因此无论你的程序运行在Windows、macOS还是Linux上,都可以安全地使用它们。

import os# 获取文件的绝对路径abs_path = os.path.abspath('file.txt')
print(f'Absolute path: {abs_path}')# 获取文件所在的目录
dir_name = os.path.dirname(abs_path)
print(f'Directory: {dir_name}')# 获取文件的基本名和扩展名
base_name = os.path.basename(abs_path)
print(f'Base name: {base_name}')
root, ext = os.path.splitext(base_name)
print(f'Root: {root}, Extension: {ext}')

假设file.txt位于/home/user/documents/目录下,运行这段代码会输出:

Absolute path: /home/user/documents/file.txt
Directory: /home/user/documents
Base name: file.txt
Root: file, Extension: .txt

One More Thing: 文件遍历和搜索

Python的os模块提供了一个os.walk()函数,这是一个简单易用但强大的工具,用于在目录树中生成文件名。结合fnmatch模块,我们可以实现对文件的模式匹配搜索。

import os
import fnmatchdef find(pattern, path):result = []for root, dirs, files in os.walk(path):for name in fnmatch.filter(files, pattern):result.append(os.path.join(root, name))return result# 查找当前目录及其所有子目录中的所有.txt文件
print(find('*.txt', '.'))

假设当前目录及其子目录下有file1.txtfile2.txtsub/file3.txt三个文件,运行这段代码会输出:

['./file1.txt', './file2.txt', './sub/file3.txt']

我们希望你能从这篇博客中学到Python文件操作的各种技巧,并能在你的Python编程之旅中发挥作用。如果你有任何问题或想法,欢迎留言交流。


最后,绵薄之力
感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

资料获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,关注公众号:一个心态巨好的朋友 扣 ‘1’ 即可自行领取。

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

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

相关文章

Yolov8改进---注意力机制:ICASSP2023 EMA基于跨空间学习的高效多尺度注意力、效果优于ECA、CBAM、CA | 小目标涨点明显

1.EMA介绍 论文:https://arxiv.org/abs/2305.13563v1 录用:ICASSP2023 通过通道降维来建模跨通道关系可能会给提取深度视觉表示带来副作用。本文提出了一种新的高效的多尺度注意力(EMA)模块。以保留每个通道上的信息和降低计算开销为目标,将部分通道重塑为批量维度,并将…

实现Linux(Ubuntu22.04)与Windows文件互通共享(双方永久往来~)

Samba服务器了解(防守) Samba是一个开源软件套件,它允许在不同操作系统之间共享文件、打印机和其他资源。它是基于SMB/CIFS协议,这是一种用于在Windows系统中共享文件和打印机的网络协议。Samba服务器可以在Linux、Unix、macOS和…

掌握imgproc组件:opencv-直方图与匹配

直方图与匹配 1. 图像直方图概述2.直方图的计算与绘制2.1 计算直方图:calcHist()函数2.2 找寻最值:minMAxLoc()函数2.3 示例程序:绘制H-S直方图 3.直方图对比3.1 对比直方图:compareHist()函数3.2 示例程序:直方图对比…

SOLIDWORKS软件有哪些版本?

SOLIDWORKS软件是基于Windows开发的三维 CAD系统,技术创新符合CAD技术的发展潮流和趋势,SOLIDWORKS每年都有数十乃至数百项的技术创新,公司也获得了很多荣誉。该系统在1995-1999年获得全球微机平台CAD系统评比NO1;从1995年至今&am…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中,我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始,逐步引导您完成整个项目,包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一,项目概述 本项目旨在…

【Flutter】Audioplayers 4.1.0 简要使用说明

文章目录 一、前言二、安装和设置三、基本使用1.创建 AudioPlayer 实例2.设置音频源3.控制播放 四、示例代码五、总结 一、前言 Audioplayers 是一个非常实用的 Flutter 插件,它可以帮助我们在 Flutter 应用中播放音频。无论你是想在你的应用中添加背景音乐&#x…

五、动画 - 旋转rotate

目录: 1.简介2.详解 一、 简介 通过旋转可以使元素沿着x, y,或者z选择指定的角度rotateX()rotateY()rotateZ()相关术语:45deg: 45度1turn 1圈, .5turn 半圈二、 详解 需求:在界面上定义一个box1, 放到视口中&#xff…

【Kubernetes资源篇】ConfigMap配置管理中心详解

文章目录 一、ConfigMap配置中心理论知识1、ConfigMap配置中心简介2、ConfigMap局限性 二、创建ConfigMap的四种方式1、第一种:通过命令行创建ConfigMap2、第二种:通过指定文件创建ConfigMap3、第三种:通过指定目录创建ConfigMap4、第四种&am…

kafka入门用这一篇就够了!

目录 1,kafka简单介绍 2,kafka使用场景 3,kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 提交策略 零拷贝技术(netty) 1,kafka简单介绍 kafka是一款分布式、支持分区的、多…

JS知识点汇总(五)--执行上下文

1. JavaScript中执行上下文和执行栈是什么? 1、执行上下文 执行上下文是一种对Javascript代码执行环境的抽象概念,也就是说只要有Javascript代码运行,那么它就一定是运行在执行上下文中 执行上下文的类型分为三种: 全局执行上…

CommonJS 和 ES6 module

本文主要自己觉得要记录的点记录下来,不耽误大家时间,会持续更新。 Module对象 Module {id: xxx/demo/1.js, //加载文件的绝对路径path: xxx/demo,// 加载文件所在目录的绝对路径exports: [Function (anonymous)],filename: xxx/demo/1.js,加载文件的绝对路径load…

【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发

直播预约通道: 【直播预告】HarmonyOS极客松赋能直播第三期:一次开发多端部署与ArkTS卡片开发