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() 判断文件是否是一个终端设备
相关推荐
小白银子1 小时前
零基础从头教学Linux(Day 52)
linux·运维·服务器·python·python3.11
摇滚侠1 小时前
Spring Boot 3零基础教程,WEB 开发 静态资源默认配置 笔记27
spring boot·笔记·后端
AAA小肥杨3 小时前
基于k8s的Python的分布式深度学习训练平台搭建简单实践
人工智能·分布式·python·ai·kubernetes·gpu
天若有情6734 小时前
Java Swing 实战:从零打造经典黄金矿工游戏
java·后端·游戏·黄金矿工·swin
一只叫煤球的猫4 小时前
建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个
后端·mysql·性能优化
lichong9514 小时前
Git 检出到HEAD 再修改提交commit 会消失解决方案
java·前端·git·python·github·大前端·大前端++
Tiny番茄4 小时前
31.下一个排列
数据结构·python·算法·leetcode
小白学大数据6 小时前
实战:Python爬虫如何模拟登录与维持会话状态
开发语言·爬虫·python
FriendshipT6 小时前
目标检测:使用自己的数据集微调DEIMv2进行物体检测
人工智能·pytorch·python·目标检测·计算机视觉
magic334165636 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储