第7章 文件操作

第7章 文件操作

7.1 文件的基本概念

在计算机中,文件是存储在磁盘上的数据集合。文件可以包含各种类型的数据,如文本、图像、音频、视频或程序代码。

文件系统通过文件名和文件路径来定位和管理文件。文件名通常包含文件的名称和扩展名(例如 .txt 表示文本文件,.jpg 表示图像文件)。文件路径可以是绝对路径或相对路径。

在编写程序的时候,数据是以二进制的形式存储在内存的,将数据写到磁盘文件的过程称之为持久化

7.1.1 文件的分类

1)纯文本文件

有统一的编码,可以被看做存储在磁盘上的长字符串。常见编码格式有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等。

2)二进制文件

没有统一的字符编码,直接由 0 与 1 组成。如图片文件(jpg、png),视频文件(avi)等。

7.1.2 文件的路径

1)相对路径

从当前位置到指定位置的路径。如:./hello_world.py./ 代表当前路径,../ 代表上一级路径。

2)绝对路径

从根目录到指定位置的路径。如:E:/Hello/hello.py

7.2 文件的打开与关闭

1)打开文件

使用 open() 打开或创建文件,该方法执行完毕之后返回的是一个 file 对象。

常用形式:

python 复制代码
f = open("test.txt", "w")
模式 说明
r 只读,文件若不存在会报错。默认此模式
w 写入,写入前清空原有数据。文件不存在会创建文件
a 追加写入,在原有数据后追加,文件不存在会创建文件
x 创建新文件并写入,文件若已存在会报错
b 以二进制打开。一般用于非文本文件如图片等
t 以文本模式打开,默认此模式
+ 能读能写

完整形式:

python 复制代码
open(
    file,            # 文件路径
    mode="r",        # 文件打开模式
    buffering=-1,    # 缓冲
    encoding=None,   # 文本编码方式,一般用utf8
    errors=None,     # 报错级别
    newline=None,    # 区分换行符
    closefd=True,    # 传入的file参数类型
    opener=None,     # 设置自定义开启器
)

2)关闭文件

python 复制代码
f.close()

7.3 文件读写

7.3.1 写数据

python 复制代码
# 打开文件
f = open("test.txt", "w")
# 写入数据
f.write("hello world\n")
f.write("nihao python\n")
# 关闭文件
f.close()

7.3.2 读数据

1)read

read([size]) 可以从文件中读取数据,size 表示要读取的数据长度(单位是字节),如果没有传入 size 则读取文件中所有的数据。

python 复制代码
f = open("test.txt", "rt")
print(f.read())
f.close()

2)readline

readline([size]) 可以从文件中读取整行数据。

python 复制代码
f = open("test.txt", "rt")
print(f.readline())
f.close()

3)readlines

readlines([size]) 读取所有行并返回列表。

python 复制代码
f = open("test.txt", "r", encoding="utf-8")
print(f.readlines())
f.close()

7.4 常用函数

函数 说明
file.seek(offset[, from]) 移动偏移量并返回新的绝对位置
file.tell() 返回当前偏移量
file.truncate([size]) 从开头开始截断文件
file.writelines(seq) 将序列中字符串写入文件
file.readable() 如果可以读取文件则返回 True
file.writeable() 如果可以写入文件则返回 True
file.seekable() 如果文件支持随机访问则返回 True
os.rename(old, new) 重命名文件
os.remove(file) 删除文件
os.mkdir(dir) 创建目录,不支持递归创建
os.makedirs(dir) 递归创建目录
os.getcwd() 获取当前路径
os.chdir(dir) 进入指定目录
os.listdir(dir) 获取目录下文件和目录列表
os.rmdir(dir) 删除空目录
os.removedirs(dir) 递归删除空目录
os.path.abspath(path) 将相对路径转换为绝对路径
os.path.basename(path) 获取路径中的文件名部分
os.path.dirname(path) 获取路径中的目录部分
os.path.join(*paths) 拼接多个路径
os.path.split(path) 将路径分割为目录和文件名的元组
os.path.splitext(path) 将路径分割为文件名和扩展名的元组
os.path.exists(path) 判断路径是否存在
os.path.isfile(path) 判断路径是否为文件
os.path.isdir(path) 判断路径是否为目录
os.path.getsize(path) 获取文件的大小(字节)
os.path.getatime(path) 获取文件的最后访问时间
os.path.getmtime(path) 获取文件的最后修改时间

os.walk() 递归遍历目录:

python 复制代码
import os
for root, dirs, files in os.walk(os.getcwd()):
    print("当前路径:", root)
    print("目录:", dirs)
    print("文件:", files)
    print()

7.5 案例:文件拷贝

python 复制代码
def copyFile(source_file_path, dest_file_path):
    source_file = open(source_file_path, 'rb')
    dest_file = open(dest_file_path, 'wb')
    content = source_file.read(1024)
    while content:
        dest_file.write(content)
        content = source_file.read(1024)
    source_file.close()
    dest_file.close()

copyFile("D:/mv.png", "E:/mv.png")

优化:这种方式可以不用读取整个文件,减小内存压力。

相关推荐
曲幽2 分钟前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户8358086187911 小时前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python
xiezhr3 小时前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
Warson_L18 小时前
Python `Annotated` 与 LangGraph Reducer 学习笔记
python
韩师傅18 小时前
海天线算法的前世今生
python·计算机视觉
韩师傅18 小时前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
Warson_L18 小时前
LangGraph的MessageState and HumanMessage
python
韩师傅18 小时前
当你的甲方吐槽天空不够蓝,你应该如何应对
python·计算机视觉
Warson_L19 小时前
python的类&继承
python
Warson_L19 小时前
类型标注/type annotation
python