一、打开文件
- open():该函数可以打开一个存在的文件,或者创建一个文件。
语法:open('name', 'mode')
name:打开目标文件名的字符串或目标文件的路径。
mode:设置文件的访问模式:只读、写入、追加等。
模式:
r | 以只读方式打开文件(read)。文件的指针将会放在文件的开头。默认模式。 |
w | 打开一个文件只用于写入(write)。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建文件并写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建文件并写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。文件若不存在,程序会crash。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。 |
a+ | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。 |
二、文件读取
- read():对象文件.read(num)
num:表示要从文件中读取的数据的长度(单位是字节),注意换行'\n'计一个字节,如果没有传入num,那么就表示读取文件中所有的数据。
- readlines():按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
- readline():一次读取一行内容。
三、文件和文件夹的操作
在Python中文件和文件夹的操作要借助os模块里面的相关功能完成。
文件:
- seek():用来移动文件指针。
语法:文件对象.seek(偏移量, 起始位置)
起始位置:0:文件开头 1:当前位置 2:文件结尾。
- write():文件对象.write('内容')
- os.rename(目标文件名,新文件名):重命名目标文件。
- os.remove(文件名):删除文件。
文件夹:
- os.mkdir(文件夹名字):创建文件夹。
- os.rmdir(文件夹名字):删除文件夹。
- os.getcwd():获取当前目录。
- os.chdir(目录):改变默认目录(一般为源文件的目录)。
- os.listdir(目录):获取目录列表。
四、文件备份
1、接收用户输入的目标文件
old_name = input('输入要备份的文件名')
2、规划备份文件名
2.1、提取目标文件名和后缀
2.2、判断文件名是否有效
2.3、组织备份的文件名,xx[备份]后缀
#获取目标文件后缀的开始下标,细节:rfind()
index = old_name.rfind('.')
#判断文件名是否有效
if index > 0:
postfix = old_name[index:]
new_name = old_name[:index] + '[备份]' + postfix
3、备份文件写入数据
3.1、打开源文件 和 备份文件
old_f = open(old_name, 'rd') #使用rd方式能稳定打开文件
new_f = open(new_name, 'wb')
3.2、将源文件数据写入备份文件
细节:如果不确定目标文件大小,就循环读取写入,当读取的数据没有了就终止循环。
while True:
con = old_f.read(1024)
if con == 0:
#表示读写完成
break
new_f.write(con)#写入old_f的内容
3.3、关闭文件
old_f.close()
new_f.close()
五、应用案例
批量修改文件名,既可以添加指定内容,又能删除指定字符串。
- 步骤
- 设置添加删除字符串的标识
- 获取指定目录的所有文件
- 将原有文件名添加/删除指定字符串,构造新名字
- os.rename()重命名
import os
#1则添加指定字符,2则删除指定字符
flag = 2
file_list = os.listdir()
print(file_list)
#遍历文件列表内的文件
for name in file_list:
#添加指定字符
if flag == 1:
new_name = 'Python_' + name
elif flag == 2:
num = len('Python_')
new_name = name[num:]
os.rename(name, new_name)