Python 文件操作详解

文章目录

  • Python 文件操作详解
    • 一、文件操作的基本流程
    • 二、文件打开模式详解
      • 1. 基本模式
      • 2. 扩展模式
      • 3. 模式组合示例
    • 三、文件操作方法大全
      • 1. 打开和关闭文件
      • 2. 读取文件内容
      • 3. 写入文件内容
      • 4. 文件指针操作
    • 四、文件编码处理
    • 五、二进制文件操作
    • 六、常见文件操作场景
      • 1. 文件内容修改
      • 2. CSV文件处理
      • 3. JSON文件处理
    • 七、文件操作最佳实践

Python 文件操作详解

文件操作是编程中最基础也是最重要的功能之一。Python 提供了丰富的文件操作方法,下面我将从基础到高级,全面详细地讲解 Python 中的文件操作。

一、文件操作的基本流程

文件操作的三个核心步骤:

  1. 打开文件:建立程序与文件的连接
  2. 读写操作:读取内容或写入数据
  3. 关闭文件:释放系统资源
[打开文件 open()] → [读/写 read()/write()] → [关闭文件 close()]

二、文件打开模式详解

Python 的 open() 函数支持多种模式,可以通过组合使用实现不同功能:

1. 基本模式

模式描述文件指针位置文件存在文件不存在
‘r’只读文件开头正常打开报错 FileNotFoundError
‘w’写入文件开头清空内容创建新文件
‘a’追加文件末尾保留内容创建新文件
‘x’创建文件开头报错 FileExistsError创建新文件

2. 扩展模式

模式描述常组合的模式
‘b’二进制模式‘rb’, ‘wb’, ‘ab’
‘t’文本模式(默认)‘rt’, ‘wt’, ‘at’
‘+’读写模式‘r+’, ‘w+’, ‘a+’

3. 模式组合示例

# 文本模式读写(默认)
f = open('file.txt', 'r')  # 等同于 'rt'# 二进制模式读写
f = open('image.png', 'rb')# 读写模式(可读可写)
f = open('data.txt', 'r+')  # 读写,文件必须存在
f = open('data.txt', 'w+')  # 读写,会清空文件
f = open('data.txt', 'a+')  # 读写,追加模式

三、文件操作方法大全

1. 打开和关闭文件

# 基本打开方式
f = open('example.txt', 'r')
try:# 文件操作content = f.read()
finally:f.close()  # 必须确保文件被关闭# 推荐使用 with 语句(上下文管理器)
with open('example.txt', 'r') as f:content = f.read()
# 离开 with 块后文件自动关闭

2. 读取文件内容

方法描述适用场景
read(size)读取size字节/字符,不指定则读取全部小文件读取
readline()读取一行逐行处理
readlines()读取所有行,返回列表需要所有行时
迭代文件对象逐行读取大文件处理
# 读取整个文件
with open('example.txt', 'r') as f:content = f.read()  # 全部内容作为一个字符串# 逐行读取(内存友好)
with open('large_file.txt', 'r') as f:for line in f:  # 文件对象是可迭代的print(line.strip())  # 去除首尾空白字符# 读取特定字节数
with open('binary.data', 'rb') as f:chunk = f.read(1024)  # 读取1024字节while chunk:  # 循环读取直到文件结束process(chunk)chunk = f.read(1024)

3. 写入文件内容

方法描述注意点
write(str)写入字符串不会自动加换行
writelines(seq)写入字符串序列序列中的字符串不会被自动处理
# 写入字符串
with open('output.txt', 'w') as f:f.write("Hello, World!\n")  # 需要手动添加换行符f.write("这是第二行内容\n")# 写入多行
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open('lines.txt', 'w') as f:f.writelines(lines)  # 注意:不会自动添加换行符# 追加内容
with open('log.txt', 'a') as f:f.write("新的日志条目\n")

4. 文件指针操作

文件对象维护一个指针,指示当前读写位置:

方法描述
tell()返回当前指针位置
seek(offset, whence)移动指针到指定位置

whence 参数:

  • 0: 文件开头(默认)
  • 1: 当前位置
  • 2: 文件末尾
with open('example.txt', 'rb+') as f:  # 必须用二进制模式才能使用非0的whenceprint(f.tell())  # 0,文件开头f.seek(5)  # 移动到第5字节print(f.tell())  # 5f.seek(3, 1)  # 从当前位置再移动3字节print(f.tell())  # 8f.seek(-2, 2)  # 移动到文件末尾前2字节print(f.tell())  # 文件总长度-2

四、文件编码处理

文本文件需要指定正确的编码,常见编码:

  • UTF-8(推荐)
  • GBK(中文Windows常用)
  • ASCII(仅基础英文)
# 读取不同编码的文件
with open('gbk_file.txt', 'r', encoding='gbk') as f:content = f.read()# 写入指定编码的文件
with open('utf8_file.txt', 'w', encoding='utf-8') as f:f.write("这是UTF-8编码的内容")# 处理编码错误(遇到无法解码的字符时)
with open('problematic.txt', 'r', encoding='utf-8', errors='ignore') as f:content = f.read()  # 忽略无法解码的字符
# 其他errors参数:'replace'(用?替代), 'strict'(默认,抛出异常)

五、二进制文件操作

处理图片、音频、视频等非文本文件:

# 复制二进制文件
with open('source.jpg', 'rb') as src, open('copy.jpg', 'wb') as dst:dst.write(src.read())# 分块读取大文件
CHUNK_SIZE = 1024 * 1024  # 1MB
with open('large_video.mp4', 'rb') as f:while True:chunk = f.read(CHUNK_SIZE)if not chunk:  # 读取结束breakprocess_chunk(chunk)

六、常见文件操作场景

1. 文件内容修改

# 修改文件中的特定内容
with open('config.ini', 'r+') as f:lines = f.readlines()f.seek(0)  # 回到文件开头for line in lines:if line.startswith('timeout='):f.write('timeout=300\n')  # 修改配置else:f.write(line)f.truncate()  # 截断文件,确保删除旧内容

2. CSV文件处理

import csv# 读取CSV文件
with open('data.csv', 'r', newline='') as f:reader = csv.reader(f)for row in reader:print(row)# 写入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', newline='') as f:writer = csv.writer(f)writer.writerows(data)

3. JSON文件处理

import json# 读取JSON文件
with open('data.json', 'r') as f:data = json.load(f)print(data['key'])# 写入JSON文件
data = {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Java']}
with open('output.json', 'w') as f:json.dump(data, f, indent=4)  # indent参数美化输出

七、文件操作最佳实践

  1. 总是使用 with 语句:确保文件正确关闭,即使发生异常
  2. 处理大文件要分块:避免内存不足,使用迭代或分块读取
  3. 明确指定编码:特别是跨平台应用,默认使用UTF-8
  4. 检查文件存在性:操作前检查os.path.exists()或捕获异常
  5. 注意换行符差异:Windows(\r\n), Linux/macOS(\n), 使用newline=''控制
  6. 二进制模式处理行尾:二进制模式下不会转换行尾符
# 综合最佳实践示例
import os
from pathlib import Pathfile_path = Path('data') / 'important.txt'try:with open(file_path, 'r+', encoding='utf-8', newline='') as f:# 读取内容content = f.read()# 处理内容modified = content.replace('old', 'new')# 写回文件f.seek(0)f.write(modified)f.truncate()  # 确保删除旧内容except FileNotFoundError:print(f"错误:文件 {file_path} 不存在")
except PermissionError:print(f"错误:没有权限访问 {file_path}")
except UnicodeDecodeError:print(f"错误:文件编码问题,尝试其他编码")

通过以上详细讲解,你应该对Python文件操作有了全面的了解。记住,文件操作是编程基础,熟练掌握这些方法对日常开发非常有帮助!

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

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

相关文章

用AI配合MCP快速生成n8n工作流

在数字化时代的浪潮中,AI技术正以前所未有的速度改变着我们的生活和工作方式。从智能家居到智能办公,从数据分析到自动化流程,AI的应用场景无处不在。今天,我们将带你走进一个充满创新与效率的世界,探索如何通过AI大眼…

ArkUI-X框架LogInterface使用指南

ArkUI-X框架支持日志拦截能力,Android侧提供原生接口,用于注入LogInterface接口,框架日志及ts日志通过该接口输出,本文的核心内容是介绍如何在Android平台上有效利用ArkUI-X框架的LogInterface拦截日志。 Android平台创建ArkUI-X…

函数重载与函数模板

函数重载与函数模板 函数重载 函数组成 返回类型 函数名称(参数列表){函数体}函数签名:函数名称(参数列表) C 允许定义同名函数,前提是它们具有不同的签名。这被称为函数重载 。 C 编译器通过检查调用中参数的数量、类型和顺序来选择要调用的适当函…

NLP学习路线图(四十六):可解释性

在自然语言处理(NLP)技术重塑人机交互、信息检索甚至司法决策的今天,一个尖锐的问题愈发凸显:当模型在文本分类中判定你的贷款申请被拒,或在简历筛选中将你排除,你是否有权追问一句——“为什么?” 一、黑箱迷雾:NLP模型的不透明困境 现代NLP的核心驱动力——深度神经…

uniapp的app项目,在华为pad上运行,页面显示异常

最开始为了好调试,运行成h5在浏览器调试的,调完以后,放到pad上。。。天塌了,所有页面异常,感觉被放大了好多,而且页面很乱。。。 查了很多资料,说把px改为rpx,好,全部改…

Linux中的连接符

Linux中的&&连接符 和其它语言类似,在Shell中,&&是一个逻辑运算符,表示逻辑AND,用于连接多个条件表达式 不同的是,在Linux系统中,&&不仅可以连接条件表达式,而且还能连…

装饰模式Decorator Pattern

模式定义 动态地给对象增加额外的职责 对象结构型模式 模式结构 Component:抽象构件 ConcreteComponent: 具体构件 Decorator:抽象装饰类 ConcreteDecorator: 具体装饰类 抽象装饰类代码 public class Decorator extends Compo…

https说明

http是无状态的,https是在http应用层协议和tcp传输控制层之间加了一层,主要功能包括加密传输内容,校验信息是否完整,信息是否被篡改等。http的网络传输,源端应用层发送http请求,传输到源端的控制层&#xf…

实时操作系统(FreeRTOS、RT-Thread)RISC-V

FreeRTOS:FreeRTOS™ - FreeRTOS™ RT-Thread:rt-thread.org VxWorks: QNX Neutrino RTOS: RT-Linux: 一、 实时操作系统介绍 实时操作系统(Real Time Operating System,简称RTOS&#xff…

Python3除标准库外更全面的XML解析方案

一、扩展解析库方案 lxml高性能解析 from lxml import etree doc etree.parse(data.xml) # XPath 2.0增强查询 nodes doc.xpath(//student[score>90]/name/text())优势:支持XPath 2.0语法和XSLT转换,比标准库快5-10倍 BeautifulSoup混合解析 fr…

同时装两个MySQL, 我在MySQL5的基础上, 安装MySQL8

目录 1. 前言 2. 下载MySQL 3. 安装MySQL 3.1 第一步:选择MySQL ​编辑 3.2 第二步:存储地址 3.3 第三步 3.4 第四步:完成基础配置 3.5 第五步 3.6 第六步:数据库密码 3.7 第七部:服务名 4. 环境变量 4.1 复制MySQL的bin地址 4.2 进入高级系统设置 4.3 PATH 4.4 更改…

Visual Studio 2022打包程序流程

Visual Studio 2022打包程序流程 打开管理拓展 安装Microsoft Visual Studio Installer Projects 关闭软件才能继续安装 安装完成后点击,解决方案,创建新项目 添加:setup project 打开软件的路径 复制路径 添加文件 粘贴刚才复制的路径&…

web3方法详解

web3.py 是一个功能强大的 Python 库,用于与以太坊区块链交互。它提供了多种模块和功能,涵盖账户管理、智能合约交互、交易发送、区块链数据查询等。以下是 web3.py 的主要功能模块及其用途: 1. Web3 核心模块 功能:提供基础连接、工具函数和核心功能。 常用方法: Web3(…

HTML5+JS实现一个简单的SVG 贝塞尔曲线可视化设计器,通过几个点移动位置,控制曲线的方向

三次贝塞尔曲线,二次贝塞尔曲线有什么区别 https://blog.csdn.net/xiaoyao961/article/details/148678265 SVG 贝塞尔曲线可视化设计器 下面是一个简单的贝塞尔曲线可视化设计器,使用 HTML5 和 JavaScript 实现。这个设计器允许你通过拖动控制点来实时调整贝塞尔曲…

Pytorch框架——自动微分和反向传播

一、自动微分概念 自动微分(Automatic Differentiation,AD)是一种利用计算机程序自动计算函数导数的技术,它是机器学习和优化算法中的核心工具(如神经网络的梯度下降),通过反向传播计算并更新梯…

【Linux手册】进程的状态:从创建到消亡的“生命百态”

目录 前言 操作系统进程状态 运行状态 阻塞状态 挂起状态 Linux中具体的进程状态 R(running)运行状态 S(sleeping)阻塞状态 D(disk sleep)磁盘休眠状态 T(stopped)和t(tracing stop) X(dead)终止状态 Z(zombie)僵尸状态 僵尸进程的危害 前言 我们在运行可执行程序…

李沐--动手学深度学习 LSTM

1.从零开始实现LSTM #从零开始实现长短期记忆网络 import torch from torch import nn from d2l import torch as d2l#加载时光机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps)#1.定义和初始化模型参数&#xff…

面经的疑难杂症

1.介绍一下虚拟地址,虚拟地址是怎么映射到物理地址的? 虚拟地址是指在采用虚拟存储管理的操作系统中,进程访问内存时所使用的地址。每个进程都有独立的虚拟地址空间,虚拟地址通过操作系统和硬件(如MMU,内存…

去噪扩散概率模型(DDPM)全解:从数学基础到实现细节

一、 概述 在这篇博客文章中,我们将深入探讨去噪扩散概率模型(也被称为 DDPMs,扩散模型,基于得分的生成模型,或简称为自动编码器),这可以说是AIGC最近几年飞速发展的基石,如果你想做…

【系统分析师】2011年真题:案例分析-答案及详解

文章目录 试题1【问题 1】【问题 2】【问题 3】 试题2【问题 1】【问题 2】【问题 3】 试题3【问题 1】【问题 2】【问题 3】 试题4【问题 1】【问题 2】【问题 3】 试题5【问题 1】【问题 2】【问题 3】 试题1 随着宽带应用快速发展,用户要求系统服务提供商提供基…