Python文件操作与IO:从基础到高级技巧的完整指南

目录

一、引言

二、基础文件操作

打开文件

写入文件

读取和写入二进制文件

四、文件路径处理

五、文件操作的高级技巧

上下文管理器(with 语句)

文件锁

文件编码

使用内置模块处理文件

文件压缩与解压缩

六、案例:处理日志文件

七、总结


一、引言

Python 是一种强大的编程语言,它以其易用性和丰富的库支持而著称。在 Python 中,文件操作与 I/O(Input/Output,输入/输出)是非常常见的任务。无论是读取配置文件、处理日志文件,还是与数据库进行交互,都需要对文件操作有深入的理解。本文将从基础开始,逐步介绍 Python 中的文件操作与 I/O,并涵盖一些高级技巧,帮助读者更好地掌握这一重要技能。

二、基础文件操作

打开文件

在 Python 中,我们使用 open() 函数来打开文件。该函数返回一个文件对象,该对象提供了许多用于读取和写入文件的方法。

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

with 语句用于确保文件在操作完成后正确关闭,即使发生异常也是如此。

写入文件

要写入文件,我们需要在 open() 函数中指定写入模式('w' 表示写入模式,会覆盖原有内容;'a' 表示追加模式,会在文件末尾添加内容)。

# 写入文件,'w' 表示写入模式  
with open('example.txt', 'w') as file:  
    file.write('Hello, World!')

读取和写入二进制文件

对于二进制文件,我们需要使用 'rb' 或 'wb' 模式来打开文件。

# 读取二进制文件  
with open('image.png', 'rb') as file:  
    binary_data = file.read()  
  
# 写入二进制文件  
with open('output.png', 'wb') as file:  
    file.write(binary_data)

三、文件对象的常用方法

除了 read() 和 write() 方法外,文件对象还提供了许多其他有用的方法。

  • readline():读取一行内容。
  • readlines():读取所有行,并返回一个包含所有行的列表。
  • seek(offset, whence):移动文件读取/写入的指针位置。
  • tell():返回当前文件读取/写入的指针位置。
  • flush():将缓冲区的内容写入磁盘,确保文件内容已经更新。

四、文件路径处理

在处理文件时,经常需要处理文件路径。Python 提供了 os 和 os.path 模块来处理这些任务。

import os  
  
# 获取当前工作目录  
current_dir = os.getcwd()  
print(current_dir)  
  
# 拼接文件路径  
file_path = os.path.join(current_dir, 'example.txt')  
print(file_path)  
  
# 检查文件是否存在  
if os.path.exists(file_path):  
    print("File exists.")  
else:  
    print("File does not exist.")

五、文件操作的高级技巧

上下文管理器(with 语句)

前面已经提到了 with 语句,它不仅可以确保文件在操作完成后正确关闭,还可以用于其他需要设置和清理的任务。

文件锁

在多线程或多进程环境中,有时需要确保同一时间只有一个线程或进程可以访问文件。Python 的 fcntl(在 Unix 系统上)和 msvcrt(在 Windows 上)模块提供了文件锁的功能。

文件编码

在处理文本文件时,需要指定正确的文件编码。Python 3 默认使用 UTF-8 编码,但也可以指定其他编码。

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

使用内置模块处理文件

Python 提供了许多内置模块来处理特定类型的文件,如 CSV 文件(csv 模块)、JSON 文件(json 模块)等。这些模块提供了更高级别的抽象,使文件处理更加简单。

文件压缩与解压缩

Python 的 zipfile 和 gzip 模块可以用于处理压缩文件。这些模块提供了读取和解压缩文件的功能,使处理大型文件或网络传输更加高效。

六、案例:处理日志文件

假设我们有一个日志文件 log.txt,内容如下:

2023-09-17 10:00:00 INFO: User logged in.  
2023-09-17 10:30:00 ERROR: Connection failed.
2023-09-17 11:00:00 INFO: New message received.
...

我们的目标是解析这个日志文件,提取出所有的错误消息(ERROR 级别)以及它们的时间戳。  
  

import re  
  
# 定义一个函数来解析日志文件  
def parse_log_file(log_file):  
    errors = []  
    with open(log_file, 'r') as file:  
        for line in file:  
            match = re.search(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) ERROR: (.*)', line)  
            if match:  
                timestamp, message = match.groups()  
                errors.append((timestamp, message.strip()))  
    return errors  
  
# 调用函数并打印结果  
errors = parse_log_file('log.txt')  
for timestamp, message in errors:  
    print(f"{timestamp}: {message}")

在上面的代码中,我们使用正则表达式来匹配日志文件中的每一行,并提取出时间戳和错误消息。然后,我们将这些信息存储在一个列表中,并最后打印出来。

七、总结

本文详细介绍了 Python 中的文件操作与 I/O,从基础的文件打开、读取、写入,到高级的文件路径处理、文件锁、文件编码,再到使用内置模块处理特定类型的文件,以及文件压缩与解压缩。通过具体的案例和代码示例,我们展示了如何在 Python 中进行高效的文件操作。希望本文能帮助读者更好地掌握这一重要技能,并在实际项目中应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

支付卡产业最新发布PCI DSS v4.0.1

自2022年3月PCI DSS v4.0发布以来,受到全球支付产业高度关注,为了解决来自所有产业相关者的反馈和问题,PCI安全标准委员会(PCI SSC)发布了该标准的修订版PCI DSS v4.0.1。其中包括对格式和印刷错误的更正,也…

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-限制最大通话时间(mod_cti基于FreeSWITCH) 一、最大通话时间 1、配置拨号方案 1、点击拨号方案 ->2、在框中输入通话最大时长->3、点击添加->4、根据图中配置->5、勾选continue。修改拨号方案需要等待一分钟即可生效 action"sched…

基于Pytorch实现AI写藏头诗

网上你找了一圈发现开源的代码不是付费订阅就是代码有问题,基于Pytorch实现AI写藏头诗看我这篇就够了。 用到的工具:华为云ModelArts平台的notebook/Pycharm/Vscode都行。 镜像:pytorch1.8-cuda10.2-cudnn7-ubuntu18.04,有GPU优先使用GPU资源。 实验背景 在短时测试使用场…

变电站SF6-O2在线监控报警系统在电力行业的创新应用

一、六氟化硫是什么? 六氟化硫又称为SF6,这种气体在常温常压下为无色无臭无毒的气体。不燃烧。对热稳定,没有腐蚀性,可以作为通用材料。电绝缘性能和消弧性能好,绝缘性能为空气的2~3倍,而且气体…

外网如何访问公司内网服务器?

在现代商业环境中,随着信息技术的快速发展,越来越多的公司有需求让远程用户在外网环境下访问公司内网服务器。这在很大程度上提高了远程办公的灵活性和效率。由于安全和网络限制等问题,实现这一目标并不是一件容易的事情。 在处理这个问题时…

【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 对话框 | 创建自定义对话框 文章编号:Qt 学习笔记…

[人工智能]啥是大模型?一篇文章看懂火遍全网的“AI大模型”

美国商业科技界正在升起两位“新神”。 一位是“钢铁侠”埃隆马斯克,“带领人类走向火星”; 一位是“奥特曼”山姆阿尔特曼,“带领AI走向人类”。 大多数人对马斯克很熟悉了,特斯拉汽车在中国道路上疾驰,朋友圈也经…

B端系统的颜值问题:成也框架,败也框架!

B端UI框架和前端框架的出现,让系统的搭建就像堆积木一样,十分的容易了。这也一下子把程序员的设计和审美水平拔高到了UI框架能够达到的高度。伴随而来的则是系统的堆砌、同质化、糟糕的体验,以及各种违和的组件被生搬硬套的绑定在一块&#x…

LabVIEW故障预测

在LabVIEW故障预测中,振动信号特征提取的关键技术主要包括以下几个方面: 时域特征提取:时域特征是直接从振动信号的时间序列中提取的特征。常见的时域特征包括振动信号的均值、方差、峰值、峰-峰值、均方根、脉冲指数等。这些特征能够反映振动…

电信数字员工“上岗”!重庆电信携手实在智能加快“数智化”转型

中国电信股份有限公司重庆分公司(以下简称重庆电信)与实在智能已达成合作,由实在智能为其建设RPA数字员工,首批已覆盖数十个业务场景,大幅提升相应业务自动化和智能化水平。深度适配电信业务运转的RPA数字员工&#xf…

JVM原理之运行时数据区域

Java运行时数据区(Runtime Data Area)是Java虚拟机(JVM)在运行Java程序时内部维护的一系列数据区域。这些区域共同协作,确保Java程序能够高效、稳定地运行。本文将详细介绍Java运行时数据区的结构和作用。 java虚拟机运行时数据区域 根据《Java虚拟机规范》规定,jvm内存…

【Java笔记】第11章:内部类

前言1. 讲解结语 上期回顾:【Java笔记】第10章:接口 个人主页:C_GUIQU 归属专栏:【Java学习】 前言 各位小伙伴大家好!上期小编给大家讲解了Java中的接口,接下来讲讲Java中的内部类! 1. 讲解 Java中的内…

通用大模型VS垂直大模型,相辅相成!

1.通用大模型: 如OpenAI的GPT系列、Google的PaLM等,因其广泛的训练数据来源和强大的泛化能力,展现出在多种任务和场景中的应用潜力。它们能够处理从文本生成、代码编写到语言翻译等多种复杂任务,适应性强,减少了针对单…

一文读懂Web Codecs API:浏览器背后的媒体魔术师

引言 ​在早期的Web 网页中,视频播放通常要依靠 Flash 和 Silverlight 等插件来完成,浏览器是不支持直接播放视频的。 随着网络技术的发展,视频这种媒体方式的需求变得普遍,HTML5中,出现了一个新的元素Video&#xf…

可积分兑换收银的会员卡小程序源码系统 带完整的安装代码包+搭建部署教程

系统概述 本会员卡小程序源码系统基于主流的前后端分离架构设计,前端采用Vue.js框架开发,后端服务则通过Node.js实现,数据库选用MySQL存储会员数据和交易记录。这样的技术栈确保了系统的高性能、易维护性和良好的扩展性。 代码示例 系统特色…

Win10 打开默认共享,提示 “拒绝访问“ 解决方法

1、打开计算机管理,默认共享C盘是开启的,如下图 2、但是想要能打开,防火墙还需要开启445端口 3、此时我们可以通过如下方式进行访问 4、输入账号密码后提示 "拒绝访问" 5、解决方法: (1)打开注…

【车载AI音视频电脑】智能驾驶监控系统,校车/警车/货车/油罐车AI分析与监控方案

校车监控方案 实时视频监控、校车位置查询、视频回放、轨迹回放。 2、 预设校车行驶线路,如有偏离,产生报警。 3、 预设校车车速,如超速,产生报警。 4、 预设学生下车,抓拍图片上传监管中心、预防小孩被困车内。 5…

【MySQL】性能分析

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p78 查看执行频次 查看当前数据库的 INSERT, UPDATE, DELETE, SELECT 访问频次: SHOW GLOBAL STATUS LIKE Com_______; 或者 SHOW SESSION STATUS LIKE Com_______; 慢查询日志 慢查询日志记录了所有执行时间超过指…

git下载项目登录账号或密码填写错误不弹出登录框

错误描述 登录账号或密码填写错误不弹出登录框 二、解决办法 控制面板\用户帐户\凭据管理器 找到对应的登录地址进行更新或者删除 再次拉取或者更新就会提示输入登录信息

Apple Intelligence模型细节

介绍苹果的设备端和服务器基础模型 在2024年全球开发者大会(WWDC)上,苹果推出了Apple Intelligence,这是一个深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统,并公布相关技术细节,整理关键点…