Python学习笔记(十七)文件操作
一、文件操作的概念和作用
思考:文件操作包含什么?
答:打开、关闭、读、写、复制...
思考:文件操作的作用是什么?
答:读取内容、写入内容、备份内容...
二、文件的基本操作
2.1 文件操作步骤
- 打开文件
- 读写等操作
- 关闭文件
注意:可以只打开和关闭文件,而不进行任何读写操作。
2.1.1 打开
2.1.2 文件对象方法
2.1.2.1 写
f.write('写入内容')
2.1.2.2 读
- read()
文件对象.read(num)
f = open('1.txt','r')
# 文件内容如果换行,底层有\n,会有字节占位,导致read书写参数读取出来眼睛看到的个数与参数值不匹配
# read() 不写参数,表示读取所有
print(f.read(10))
f.close()
- readlines()
f = open('test.txt','r')
print(f.readlines())
f.close()
- readline()
readline() 是一次读取一行内容。
f = open('test.txt','r')
print(f.readline()) #第1次调用readline则读取文件第1行内容
print(f.readline()) #第2次调用readline则读取文件第2行内容
print(f.readline()) #第3次调用readline则读取文件第3行内容
print(f.readline()) #第4次调用readline则读取文件第4行内容
print(f.readline()) #第5次调用readline则读取文件第5行内容
f.close()
2.1.2.3 seek()
作用:用来移动文件指针
语法如下:
文件对象.seek(偏移量,起始位置)
起始位置:
- 0:文件开头
- 1:当前位置
- 2:文件结尾
'''
语法: seek(目标偏移量,起始位置) 起始位置: 0 -- 开头, 1 -- 当前位置, 2 -- 结尾
目标:
1. r 改变文件指针位置:改变读取数据开始位置或把文件指针位置放结尾(无法读取数据)
2. a 改变文件指针位置,做到可以读取数据
'''
# 1. r+ :
f = open('test.txt','r+')
print(f.read()) # 读取的是目标文件所有
f.seek(2,0) # 表示向右偏移2个字节,起始位置为开头
print(f.read()) # 从目标文件第三个数据开始读取
f.seek(0,2) # 表示不偏移,起始位置为结尾
print(f.read()) # 从文件结尾读取,所以读取不出来数据
f.close()
# 2. a+ :
f = open('test.txt','a+')
print(f.read()) #文件指针在结尾读取不出来数据
f.seek(0,0) # 表示不偏移,起始位置为开头
print(f.read()) # 从文件开头开始读取
f.close()
2.1.3 关闭
文件对象名.close()
例子:
# 1. 打开 open()
f = open('test.txt','w')
# 2. 读写 write() read()
f.write('aa')
# 3. 关闭 close()
f.close()
2.2 文件操作访问模式
注意:
- 带‘b’的是以二进制的形式;
- 带‘+’的是可读可写。
'''
测试目标:
4. 访问模式对文件的影响
5. 访问模式对write()的影响
6. 访问模式是否可以省略
'''
# r: 如果文件不存在,会报错: 不支持写入操作,表示只读
f = open('test.txt','r')
f.write('aa') # 会报错
f.close()
# w :只写: 如果文件不存在,新建文件:如果执行写入,会覆盖原有内容
f = open('1.txt','w')
f.write('aaaaa') # 会覆盖原有内容
f.close()
# a : 追加: 如果文件不存在,新建文件:如果执行写入,在原有内容基础上追加新内容
f = open('2.txt','a')
f.write('abb') # 会在原有内容基础上加新的内容
f. close()
# 访问模式是否可以省略, 如果省略表示访问模式为r
f = open('1.txt')
f.close()
'''
测试目标:
1. r+ / w+ / a+ / 区别:
2. 文件指针对数据读取的影响
'''
# r+: 没有该文件则报错; 文件指针在开头,所以能读取来数据
# f = open('test1.txt','r+') # 报错,因为没有
f = open('test.txt','r+')
print(f.read())
f.close()
# w+: 没有该文件新建文件; 文件指针在开头,用新内容覆盖原内容
f = open('test1.txt','w+')
print(f.read())
f.close()
# a+: 没有该文件新建文件;文件指针在结尾,无法读取数据(文件指针后面没有数据)
f = open('test.txt','a+')
print(f.read())
注意:此截图结果只是以 r+ 形式打开文件读的结果。
三、文件备份
3.1 步骤
3.2 代码实现
注意:
# 1. 用户 输入 目标文件
old_name = input('请输入要备份的文件名:')
# 2. 规划备份文件的名字
# 2.1 提取目标文件后缀 -- 找到名字中的'.' -- 名字和后缀分离 -- 最右侧的'.'才是后缀的‘.’-- 字符串查找某个子串rfind()
index = old_name.rfind('.') # 提取后缀’.'的下标
# 2.2 组织备份的文件名 = 原名字+ [备份] + 后缀
# 原名字就是字符串当中的一部分 -- 字符串切片即可 -- 切片[开始:结束:步长]
if (index > 0):
print('原文件名字为:',old_name[:index]) # 提取原名字
print('原文件名字的后缀为',old_name[index:]) # 提取后缀
new_name = old_name[:index] + '[备份]' + old_name[index:]
print('备份文件名字为:',new_name)
# 3. 备份文件写入数据(数据和源文件一样)
# 3.1 打开原文件 和 备份文件
old_f = open(old_name,'rb')
new_f = open(new_name,'wb')
# 3.2 原文件读取 和 备份文件写入
#如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了终止循环
while True:
con = old_f.read(1024)
if len(con) == 0:
break
new_f.write(con)
# 3.3 关闭文件
old_f.close()
new_f.close()
四、 文件和文件夹的操作
在python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
- 导入os模块
import os
- 使用os模块相关功能
os.函数名()
4.1 rename(): 重命名
os.rename('旧文件名','新文件名')
注意:rename()还可用于重命名文件名
# rename(): 也可用于重命名文件夹 -- 将文件夹 aa 重命名为 aaaa
os.rename('aa','aaaa')
4.2 remove(): 删除
os.remove('文件名')
'''
4. 导入模块os
5. 使用模块内功能
'''
import os
# 1. rename(): 重命名
os.rename('2.txt','20.txt') # 执行操作后,文件被重命名
# 2. remove(): 删除文件
os.remove('20.txt') # 执行操作后,文件被删除
4.3 创建文件夹
os.mkdir(文件夹名字)
4.4 删除文件夹
os.rmdir(文件夹名字)
4.5 获取当前目录路径
os.getcwd() # C:\Users\YSH\Desktop\test
4.6 改变默认目录
os.chdir(文件夹名字)
例1:
# 5. chdir(): 改变目录路径
os.mkdir('aa')
# 需求:在aa文件夹里面创建bb文件夹: 1.切换目录到aa 2.创建bb
os.chdir('aa')
os.mkdir('bb')
例2:
# 快速在一个大文件夹下简历几个小文件
import os
os.chdir('aaaa')
os.mkdir('cc')
os.mkdir('dd')
os.mkdir('ee')
os.mkdir('ff')
os.mkdir('gg')
os.mkdir('hh')
os.mkdir('ii')
4.7 获取目录列表
os.listdir(文件夹名字)
# listdir(): 获取某个文件夹下所有文件名,返回一个列表
print(os.listdir('aa')) #['bb']
五、应用案例
添加重命名:
# 需求1:把test文件夹所有文件由 xxxx 重命名为 Python_xxxx
import os
# 1. 找到所有文件:读取aaaa文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)
# 2. 构造名字
for i in file_list:
# new_name = 'Python' + 原文件名
new_name = 'Python_' + i
# 3. 重命名
os.rename(i,new_name)
删除重命名:
# 需求2:把test文件夹所有文件由 Python_xxxx 重命名为 xxxx
import os
# 1. 找到所有文件:读取aaaa文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)
# 2. 构造新名字
for i in file_list:
num = len('Python_')
new_name = i[num:]
# 3. 重命名
os.rename(i,new_name)
六、总结