一、文件
文件基本操作:打开、关闭、读、写、复制等
文件操作作用:读取内容、写入内容和备份内容等,把数据内容存放起来,让程序下一次执行时能直接使用,而不必重新制作一份
二、文件操作步骤
2.1 打开文件
- open(name,mode):打开一个已存在的文件,若不存在,则创建一个新文件
- name:要打开的目标文件名的字符串(可包含文件所在的具体位置)
- mode:设置打开文件的访问模式,如只读、写入、追加等
打开文件模式
- r:以只读方式打开,文件指针会放在文件开头(默认模式)
- rb:以二进制格式打开一个文件用于只读,指针放开头
- r+:打开一个文件用于读写,指针放开头
- rb+:以二进制格式打开一个文件用于读写,指针放开头
- w:打开一个已存在文件用于只写入,将原有内容删除,即从头编辑,若不存在,则创建新文件
- wb:以二进制格式打开一个已存在文件用于只写入,从头编辑,若不存在则创建新文件
- w+:打开一个已存在文件用于读写,从头编辑,若不存在则创建新文件
- wb+:以二进制格式打开一个已存在文件用于读写,从头编辑,若不存在则创建新文件
- a:打开一个已存在文件用于追加,指针放结尾,即新内容写入已有内容之后,若不存在则创建新文件写入
- ab:以二进制格式打开一个已存在文件用于追加,指针放结尾,即新内容写入已有内容之后,若不存在则创建新文件写入
- a+:打开一个已存在文件用于追加,指针放结尾,若不存在则创建新文件用于读写
- ab+:以二进制格式打开一个已存在文件用于追加,指针放结尾,若不存在则创建新文件用于读写
2.2 文件对象方法
- 创建文件对象f:f = open('文件名','访问模式')
- 写:文件对象.write('内容'),返回写入的字符数
- 读
- 文件对象.read(size):size为读取长度大小,省略则读取文件中所有数据
- 文件对象.readline():一次读取一整行内容,包括'\n',返回空字符串则表示已读取至最后一行
- 文件对象.readlines():按照行的方式一次性读取整个文件内容,并返回一个列表,一行为一个列表元素
- 文件对象.tell():返回文件对象当前所处位置,是从文件开头算起的字符数
- 文件对象.seek(偏移量,起始位置):改变文件指针当前位置,返回指针移动后的位置
- 偏移量:可正可负,正为向前移,负为向后移
- 起始位置:0为开头,1为当前位置,2为结尾
- 关闭:文件对象.close()
- 文件备份
f = open('file.txt', 'w')
str = f.write('Hello World!\nHello China!\nHello JXUST!\nHello XX!')
print(str)
f = open('file.txt', 'r')
print(f.read(20), len('\n'), f.tell()) # 读取文件中前20个字符,'\n'占一位,指针移至第20个字符后,即C之后
print(f.readline(), f.tell()) # 从上一位置C之后继续读取一行,此处为该行的剩余数据
print(f.readlines(), f.tell()) # 从上一位置继续读取所有剩余行
f.close()
f = open('file.txt', 'rb+')
print(f'移动前位置:{f.tell()},移动后:{f.seek(3, 1)},移动后位置:{f.tell()}')
f.close()
输出:
48
Hello World!
Hello C 1 21
hina!
28
['Hello JXUST!\n', 'Hello XX!'] 51
移动前位置:0,移动后:3,移动后位置:3
-----------------------------------------------------------------------------------------
f = open('file.txt', 'r')
print(f.readline(2)) # 读取行内指定长度数据,即前2个字符
print(f.readline()) # 读取上一位置之后该行的剩余字符
f.close()
f = open('file.txt', 'r')
print(f.readlines(20)) # 读取指定长度数据,按行分割,第20个字符在第二行范围内,故读取前两行
f.close()
输出:
He
llo World!
['Hello World!\n', 'Hello China!\n']
-----------------------------------------------------------------------------------------
print('--------文件备份--------')
old_file_name = input('输入要备份的文件名:')
index = old_file_name.rfind('.') # 获取输入的文件名中.的索引下标
print(index, old_file_name[:index])
new_file_name = old_file_name[:index] + '(备份)' + old_file_name[index:] # 构建新文件名
print(new_file_name)
old_file = open(old_file_name, 'rb')
new_file = open(new_file_name, 'wb')
while True:
text = old_file.read() # 读取要备份的文件中的数据
print(len(text))
if len(text) == 0:
print('文件为空!')
break
new_file.write(text) # 将数据写入备份的新文件
break
old_file.close()
new_file.close()
输出:
--------文件备份--------
输入要备份的文件名:file.txt
4 file
file(备份).txt
51
2.3 文件和文件夹的操作
- 文件重命名:os.rename(目标文件名,新文件名)
- 文件删除:os.remove(目标文件名)
- 创建文件夹:os.mkdir(文件夹名)
- 删除文件夹:os.rmdir(文件夹名)
- 获取当前目录:os.getcwd()
- 改变默认目录:os.chdir(目录)
- 获取目录列表:os.listdir(目录)
2.4 批量修改文件名
print('---------文件和文件夹操作----------')
import os # 导入os模块
# 使用:os.函数名()
# os.rename('file(备份).txt', 'file[备份].txt')
# os.remove('file1.txt')
# os.mkdir('文件夹')
# os.rmdir('文件夹')
# print(os.getcwd())
# os.chdir('目录')
# print(os.listdir('面向对象'))
print('-------批量修改文件名-------')
flag = 1
dir = './文件夹/'
file_list = os.listdir(dir)
print(file_list)
for name in file_list:
if flag == 1:
new_name = 'File-' + name # 为该目录下所有文件重命名为File-加原文件名
elif flag == 2:
new_name = name[len('File-'):] # 为所有文件去除File-
print(new_name)
os.rename(dir + name, dir +new_name)