Python教程(18)——python文件操作详解

所谓的文件操作是指对计算机中的文件进行读取、写入、修改和删除等操作。简单来说可以分为以下三个部分:

  • 打开文件
  • 操作文件
  • 关闭文件

就是这三个简简单单的操作,却在计算机世界占有一席之地。打开文件有各种打开模式,各不相同;操作文件,有读写模式;关闭文件就比较简单了。

Python文件操作

基础操作

Python文件操作也是上面那三个步骤,主要包括打开文件、操作文件(读取文件、写入文件)和关闭文件等操作。

  1. 打开文件:使用open()函数打开一个文件,需要传入文件名和打开模式(如只读、写入等)。
python 复制代码
file = open(file_path, mode)
  • file_path表示文件路径,可以是相对路径或绝对路径。
  • mode表示打开文件的模式,常见的模式有:
    • 'r':只读模式(默认)。
    • 'w':写入模式,会创建文件(如果不存在),覆盖原有内容。
    • 'a':追加模式,在文件末尾追加内容(如果文件存在)。
    • 'x':独占创建模式,只能用于新建文件,若文件已存在则报错。
    • 'b':二进制模式。
    • 't':文本模式(默认)。
    • '+':更新读写模式。
  1. 读取文件:使用read()方法读取文件内容,可以传入参数指定读取的字符数。
python 复制代码
content = file.read()
print(content)
  • file.read()读取整个文件的内容。
  • file.readline():读取文件的一行内容。
  • file.readlines()读取文件所有行,返回一个包含行内容的列表。
  1. 写入文件:使用write()方法将内容写入文件。
python 复制代码
file = open("example.txt", "w")
file.write("Hello, World!")
  1. 关闭文件:使用close()方法关闭文件。
python 复制代码
file.close()

完整的代码示例:

python 复制代码
# 打开文件
file = open("example.txt", "r")

# 读取文件内容
content = file.read()
print(content)

# 写入文件
file = open("example.txt", "w")
file.write("Hello, World!")

# 关闭文件
file.close()

在实际使用中,需要注意一定要及时关闭文件,否则会资源浪费。

使用with语句管理文件

在进行文件操作时,使用 with 语句可以自动管理文件的打开和关闭,确保及时释放文件资源。

python 复制代码
with open(file_path, mode) as file:
    # 文件操作代码

with 语句块中,可以执行文件的读取、写入等操作,当代码块结束时,文件会自动关闭,无需手动调用 file.close() 方法。

处理文件操作的异常

文件操作时可能会发生异常,为了保证代码的稳定性,可以使用 try-except-finally 语句来处理文件操作的异常。

python 复制代码
try:
    file = open(file_path, mode)
    # 文件操作代码
except IOError:
    # 异常处理代码
finally:
    file.close()  # 确保关闭文件

使用 try 语句块进行文件操作,如果在操作过程中出现异常,可以通过 except 语句块捕获并处理异常。最后,无论是否发生异常,都会执行 finally 语句块来确保关闭文件。

处理文件路径

os.path 模块提供了一些函数来处理文件路径,包括获取文件名、扩展名、目录名等。

python 复制代码
import os

file_name = os.path.basename(file_path)  # 获取文件名
dir_name = os.path.dirname(file_path)  # 获取目录名
split = os.path.split(file_path)  # 拆分目录和文件名
file_extension = os.path.splitext(file_path)[1]  # 获取文件扩展名

通过使用 os.path 模块的函数可以方便地获取文件路径的各个部分,对于处理文件操作时的路径相关需求非常实用。

文本格式和二进制格式

文件操作中,操作的文件对象一般有两种格式,文本格式和二进制格式。

文本格式 (Text Mode)

  • 文件以文本格式打开时,默认假设文件内容是可读的文本数据。
  • 在文本格式中,读取文件时会将字节数据按照特定的编码方式(如UTF-8)解码成字符串。
  • 写入文件时,会将字符串按照特定的编码方式编码为字节数据后存储到文件中。

文本格式通常用于处理文本文件,比如常见的文本文档、CSV文件、JSON文件等。

二进制格式 (Binary Mode)

  • 文件以二进制格式打开时,假设文件内容是字节数据,不关心其内容是否可读。
  • 在二进制格式中,读取文件时直接返回字节数据,不进行解码转换。
  • 写入文件时,将字节数据直接写入到文件中,不进行编码转换。

二进制格式通常用于处理非文本文件,如图像文件、音频文件、视频文件等。

例子说明

假设有一个图片文件 "image.jpg",我们分别以文本格式和二进制格式打开该文件,来看看它们的区别。

python 复制代码
with open('image.jpg', 'r') as file:
    content = file.read()
    print(content)

运行上述代码,会遇到错误,因为我们试图以文本格式打开一个图片文件,而图片文件是二进制数据,不适合以文本格式打开。

python 复制代码
with open('image.jpg', 'rb') as file:
    content = file.read()
    print(content)

运行上述代码,可以成功以二进制格式读取图片文件,并打印出包含图片字节数据的内容。

以二进制格式读取图片文件时,我们可以对字节数据进行以下操作,将字节数据保存为另一个图片文件

python 复制代码
with open('image.jpg', 'rb') as file:
    content = file.read()
    
with open('new_image.jpg', 'wb') as new_file:
    new_file.write(content)

上述代码将读取的字节数据直接写入一个新的图片文件 "new_image.jpg" 中,实现了将原始图片复制到新文件的操作。

另外还可以对图片进行各种处理。

python 复制代码
from PIL import Image

with open('image.jpg', 'rb') as file:
    content = file.read()

image = Image.open(io.BytesIO(content))
# 对图片进行各种处理操作

上面使用Pillow库将读取的字节数据转换成图像对象,然后可以对图像进行各种处理操作,如调整大小、改变颜色等。

所以需要注意的是,如果想读取或操作非文本数据,如图片、音频、视频等,应该使用二进制格式打开文件,以确保正确处理和操作二进制数据。

文件操作的相关函数

在Python当中,文件的操作方法很多。以下是一点整理的一些关于文件的操作的相关函数,这些方法可用于对文件进行各种操作。如果有错误的,欢迎大家指出。

方法名 描述
open(file, mode) 打开一个文件,并返回一个文件对象
close() 关闭文件
read(size) 读取文件的全部内容,可选参数size表示读取的最大字节数
readline() 读取文件的一行内容
readlines() 以列表形式返回文件的所有行
write(str) 将字符串写入文件
writelines(sequence) 给文件写入一个序列字符串
seek(offset, whence) 改变文件的当前位置
tell() 返回文件的当前位置
truncate(size) 将文件截断到指定的大小,可选参数size表示截断的字节数
flush() 强制刷新文件缓冲区
fileno() 返回文件的文件描述符
isatty() 判断文件是否是一个终端设备
相关推荐
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC2 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
Python私教3 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
Python私教4 小时前
从表格到管理系统:别先写页面,先补齐权限、流程和审计
数据库·后端·架构
北斗落凡尘5 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
jdksjw5 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Mike_Zhang5 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff6 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody6 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
IT_陈寒7 小时前
为什么我的JavaScript闭包总是漏掉那个变量?
前端·人工智能·后端