文件介绍:
概述:
无论是 windows, Linux, Mac系统, 都是采用 文件 来管理数据的, 它们都是 文件管理系统.
之所以用文件来管理数据, 原因是因为: 内存中的数据是临时存储的, 电脑管理了, 数据就丢失了文件: 可以实现永久存储数据.
文件的类型:
文本文档, 图片类型, 视频类型, 音频类型......
文件的操作步骤:
1. 打开文件.
2. 读写操作.
3. 关闭文件.
打开文件涉及到的API(Application Programming Interface, 应用程序编程接口)
文件对象名 = open('文件路径', '打开模式', 码表) # 参3为可选项, 针对于 中文有效.
读取文件信息:
read(num) 一次读取num个字节的数据, 不写就一次性读取所有的数据.
readline() 一次读取一行.
readlines() 一次性读取读完所有行, 且会把每行数据封装到 1个列表中.
关闭文件:
文件对象名.close()
细节:
1. Python中, 路径的写法, 要么用 \\, 要么用 /, 要么用 r'一个\就行', 即: r'\' 会取消 \的转移含义, 当做1个普通字符来用.
2. 相对路径默认是相对于 当前项目的路径来写的, 即: 你直接写 1.txt, 想到于是 /当前项目路径/1.txt
1. 打开文件(file)
# 场景1: 绝对路径.
f = open(r'D:\workspace\pythonProject\data\a.txt', 'r') # r'' 取消 \的 转义函数.
f = open('D:\\workspace\\pythonProject\\data\\a.txt', 'r') # \\ 代表 1个 \
f = open('D:/workspace/pythonProject/data/a.txt', 'r') # 或者可以写成 /
# 场景2: 相对路径写法. 默认是相对于当前项目的路径来讲的
f = open('./data/a.txt', 'r') # ./ 代表当前目录
print(f'文件对象名: {f}')
2. 读写操作
read(num) # 一次读取num个字节的数据, 不写就一次性读取所有的数据.
print(f.read()) # 一次性读取所有的数据.
print(f.read(3)) # 一次读取3个字节, 包括: \n 也占1个字节
print(f.read(5)) # 一次读取5个字节, 包括: \n 也占1个字节
readline() # 一次读取一行.
print(f.readline()) # 'abc\n'
print(f.readline()) # 'defg\n'
print(f.readline()) # 'xyz'
print(f.readline()) # 空
readlines() # 一次性读取读完所有行, 且会把每行数据封装到 1个列表中.
print(f.readlines()) # ['abc\n', 'defg\n', 'xyz']
write(数据) # 往文件中写数据.
writelines() # 一次写多行.
3. 关闭文件
f.close()
演示:拷贝 a.txt文件数据 到 b.txt
# 1. 封装数据源文件, 用于: 读取它的数据.
src_f = open('./data/a.txt', 'r', encoding='utf-8')
# src_f = open('./data/a.txt', 'rb') # 字节形式 读写的时候, 不能指定码表.
# 2. 封装目的地文件, 用于: 往其中写数据.
dest_f = open('./data/b.txt', 'w', encoding='utf-8')
# dest_f = open('./data/b.txt', 'wb')
# 方式1: 一次性读取所有, 并一次性写入所有.
data = src_f.read()
dest_f.write(data)
# 方式2: 一次性读取所有(行), 并一次性写入所有行.
data = src_f.readlines() # [行, 行, 行...]
dest_f.writelines(data)
# 方式3: 循环读取, 读一行, 写一行. 或者 一次性读写指定的字节数, 一般是: 1024的整数倍.
while True:
# 一次性读取 8192个字节, 8 * 1024 = 8192个字节 = 8KB
data = src_f.read(8192)
# 核心细节: 如果读不到数据了, 即读取到文件末尾了, 结束读取.
# if len(data) == 0: # 可以判断长度
if data == '': # 也可以判断是否为空
break
# 把读取到的数据, 写到目的地文件.
dest_f.write(data)
# 3. 关闭文件.
src_f.close()
dest_f.close()
4. with-open语法
with-open语句:
它主要是针对于 文件操作的, 即: 你再也不用手动 close()释放资源了, 该语句会在 语句体执行完毕后, 自动释放资源.
格式:
with open('路径', '模式', '码表') as 别名, open('路径', '模式', '码表') as 别名:
语句体
特点:
语句体执行结束后, with后边定义的变量, 会自动被释放.
with open('./data/a.txt', 'rb') as src_f, open('./data/b.txt', 'wb') as dest_f:
# 2. 具体的 拷贝动作.
# 2.1 循环拷贝.
while True:
# 2.2 一次读取8192个字节.
data = src_f.read(8192)
# 2.3 读完了, 就不读了.
if len(data) <= 0:
# if data == '':
break
# 2.4 走到这里, 说明读到了, 把读取到的数据写出到目的地文件.
dest_f.write(data)