系列文章目录
第一章 初识python
第二章 变量
第三章 基础语句
第四章 字符串str
第五章 列表list []
第六章 元组tuple ( )
第七章 字典dict {}
第八章 集合set {}
第九章 常用操作
第十章 函数
文章目录
- 系列文章目录
- 11.1文件操作的作用
- 11.2文件的基本操作
- 打开
- 打开文件模式
- 文件对象方法
- 写
- 读
- 关闭
- 11.3文件备份
- 11.4文件和文件夹的操作
- 文件重命名
- 删除文件
- 创建文件夹
- 删除文件夹
- 获取当前目录的所在路径
- 改变当前工作目录到指定的路径
- 获取目录列表
- 案例
- 批量修改
11.1文件操作的作用
思考: 文件操作包含什么?
答:打开、关闭、读、写、复制…
思考:文件操作的的作用是什么?
答:读取内容、写入内容、备份内容…
总结: 文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。
11.2文件的基本操作
文件操作步骤:
- 打开文件
- 读写等操作
- 关闭文件
注意:可以只打开和关闭文件,不进行如何读写操作。
打开
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:
open(name ,mode )
name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式): 只读、写入、追加等。如果省略表示访问模式为r
# 1. 打开 open()
f = open("test.txt", "w")
# 2. 读写操作 write() read()
f.write("I wander in your yard, looking forward to meeting you.")
# 3. 关闭 close()
f.close()
打开文件模式
主访问模式
- r
- w
- a
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。文件不存在就报错 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,会覆盖原有内容。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,不会覆盖原有内容。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
带b的都是二进制,带+号的都是可读可写模式。
那么r+和w+有什么区别呢?
rb、r+、rb+都是基于r模式,相当于扩展开来,所有的访问模式它的基础特点都要遵循主访问模式,r是只读方式打开,如果文件不存在就报错,那么也就意味着如果rb、r+、rb+去打开一个文件,只要文件不存在,但凡带r的都报错;如果是带w模式的不管wb、w+、wb+如果打开文件,文件不存在则新建文件。这就是r+和w+的区别了。
f = open("test.txt", "r")
# f = open("test1.txt", "r")# 报错:文件不存在
# f.write("hello world")# 报错:不支持写入
f.close()
注意:此时的f是open函数的文件对象
f = open("test1.txt", "w")# 文件不存在就新建了一个文件
f.write("hello world")
f.close()
f = open("2.txt", "a") # 文件不存在就新建了一个文件
f.write("xhxy")
f.close()
注意如果是r+模式下写入会覆盖数据,换行 “\n”会有字节占位
f = open("test.txt", "r+")
f.write("666666")
f.close()
文件对象方法
写
对象.write(‘内容’)
注意
1.w和a模式:如果文件不存在则创建该文件; 如果文件存在,w模式先清空再写入,a 模式直接末尾追加。
2.r模式:如果文件不存在则报错.
读
对象.read(num)
num表示要从文件中读取的数据的长度 (单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
f = open("test.txt", "r")
# read不写参数表示读取所有;
# print(f.read()) # 结果: xhxy
print(f.read(10))
""" 结果:
xhxy
aaaaa
"""
f.close()
文件内容如果换行,底层有
\n
会有字节占位,导致read书写参数读取出来的 和 眼睛看到的个数和参数值不匹配。
对象.readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
f = open("test.txt", "r")
print(f.readlines()) # ['xhxy\n', 'aaaaa\n', 'yyyy']
f.close()
对象.readline()
readline()一次读取一行内容
f = open("test.txt", "r")
print(f"第一行: {f.readline()}")
print(f"第二行: {f.readline()}")
f.close()
文件对象.seek(偏移量, 起始位置)
作用: 用来移动文件指针。
偏移量:非负数,单位字符
起始位置:默认值为 0
- 0: 文件开头
- 1: 当前位置
- 2: 文件结尾
f = open("test.txt", "r")
f.seek(2, 0)
print(f.read())
f.close()
文件对象.tell()
作用: 返回一个整数,表示当前文件指针的位置(到文件开头的比特数)。
关闭
文件对象.close()
11.3文件备份
需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为XX[备份]后缀,例如: test[备份].txt)。
步骤:
1.接收用户输入的文件名
2.规划备份文件名
3.备份文件写入数据
代码:
# 1. 用户输入目标文件 test.txt.mp4
old_file_name = input("请输入您要备份的文件名:")
print(old_file_name)
# 2. 规划备份文件名
index = old_file_name.rfind(".")
new_file_name = old_file_name[:index] + "[备份]" + old_file_name[index:]
print(new_file_name)
# 3. 备份文件写入数据(数据和原文件一样)
old_file = open(old_file_name, "rb")
new_file = open(new_file_name, "wb")
while True:
con = old_file.read(1024)
if len(con) == 0:
# 读取完成
break
new_file.write(con)
old_file.close()
new_file.close()
如果用户输入 .txt ,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?
答:添加条件判断即可。
if index > 0:
postfix = old_file_name[index:]
# new_file_name = old_file_name[:index] + "[备份]" + old_file_name[index:]
new_file_name = old_file_name[:index] + "[备份]" + postfix
11.4文件和文件夹的操作
在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
1.导入os模块
import os
2.使用os 模块相关功能
os.函数名()
文件重命名
os.rename(目标文件名 可以带路径,新文件名)
如果没有这个文件就会报错(系统找不到指定文件)
import os
os.rename("test.txt", "123.txt")
删除文件
os.remove(目标文件名 可以带路径)
如果没有这个文件就会报错(系统找不到指定文件)
import os
os.remove("2.txt")
创建文件夹
os.mkdir(文件夹名字 可以带路径)
如果已经存在文件夹那么会报错
import os
os.mkdir("abcd")
os.rmdir("abcd")
删除文件夹
os.rmdir(文件夹名字 可以带路径)
获取当前目录的所在路径
os .getcwd()
改变当前工作目录到指定的路径
os.chdir(目录)
获取目录列表
os.listdir(目录)
获取文件夹下所有文件和文件夹,返回一个列表
案例
需求: 批量修改文件名,既可添加指定字符串,又能删除指定字符串。
步骤:
1.设置添加删除字符串的的标识
2.获取指定目录的所有文件
3.将原有文件名添加/删除指定字符串,构造新名字
4.os.rename()重命名
批量修改
需求1: 把code文件夹所有文件重命名 py_xxxx
代码:
import os
f_list = os.listdir()
for i in f_list:
new_name = "py_" + i
os.rename(i, new_name)
需求2: 删除py_重命名
import os
# 构造条件的数据,1 添加py_ ; 2 删除py_
flag = 2
f_list = os.listdir()
for i in f_list:
if flag == 1:
new_name = "py_" + i
elif flag == 2:
num = len('py_')
new_name = i[num:]
os.rename(i, new_name)
flag=1就是批量添加前缀,=2批量删除前缀