第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")

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

相关推荐
aosky4 分钟前
Linux 写内容到文件的几种方式
java·linux·服务器
投票竞赛5 分钟前
作品投票版权注意事项,线上评选上传图片视频须知
python·音视频
2601_962293538 分钟前
人工智能 & 神经网络完整入门路线(零基础可走,分阶段)
人工智能·python·深度学习·神经网络·机器学习
佳児素花痴╮12 分钟前
Qt速通2
开发语言·qt
Wang's Blog24 分钟前
Java框架快速入门: Spring Security+OAuth2之邮件验证码发送(SMTP与API方式)
java·数据库·spring
“AI国潮设计-小江”36 分钟前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁英歌舞猫IP & 创意甜品设计(附ComfyUI工作流与商业授权说明)
开发语言·人工智能·python·prompt·aigc
529宝宝起名网44 分钟前
用 Python 分析汉字字源与起名用字的关联规律:从六书结构到文化寓意的起名偏好洞察
开发语言·python
linx2951 小时前
单元九 · 零基础路线图-第 7–9 周·类与 RAII
c语言·开发语言·数据结构·c++·嵌入式硬件·算法
一只旭宝1 小时前
Python 与 C/C++ 内存模型对比总结
c语言·c++·python
电子制造自留地1 小时前
AI服务器PCB的超低损耗材料选型逻辑
运维·服务器·人工智能·科技·制造·科普·pcb工艺