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

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

相关推荐
程序员清风11 分钟前
Python 数据分析环境搭建:从 Jupyter 到 pandas
python·jupyter·数据分析
梦想不只是梦与想16 分钟前
对象存储服务器vs数据库
数据库·对象存储·图片存储
月光船幽幽24 分钟前
加性偏移外推提升参数识别可靠性
python·算法
2601_9672875726 分钟前
轮胎侧壁上的 91V 是什么意思,负荷指数与速度级别怎么看
运维·服务器·汽车
SHARK_pssm33 分钟前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
凯哥Java34 分钟前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
Ivanqhz1 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
Ivanqhz1 小时前
层归一化、残差、前馈网络与激活函数简述
服务器·数据库·人工智能·深度学习·算法
BD_Marathon1 小时前
消息对象中字段的说明
java·前端·python
Ai-_Man1 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序