1 基本操作
打开、读写、关闭。。。
# 打开文件 open()
f = open('hello.txt','w')
# 读取read(), 写入 write()
f.write('aaa')
# 关闭文件 close()
f.close()
2 文件打开模式open()
- 语法 : 文件对象 = open(‘文件名’, ‘打开模式’)
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
- 代码解释
# r:只读模式,遇到不存在文件,会报错
f = open('hello.txt','r')
f.close()
# r+:读写模式,遇到不存在文件,会报错
# 文件指针指向开头,每次会覆盖原文的写入,此时指针指向尾部,直接读取返回空
f = open('hello.txt','r+')
f.write('ddddd')
print(f.read())
f.close()
# w: 写模式,遇到不存在文件,会新建文件;文件已存在时会覆盖原文
f = open('1.txt', 'w')
f.write('bbb') # 每次执行时,原文只有bbb
f.close()
# a: 追加模式,遇到不存在文件,会新建文件;文件已存在时会在原文后追加
f = open('1.txt', 'a')
f.write('ccc') # 多次执行后文件会有多个ccc
f.close()
如果open(‘文件名’) 不加模式,默认为 ‘r’ 只读模式
3 文件的读取
3.1 read()
- 语法
文件名.read(num)
读取文件的字节num
个
'''
1.txt为
abcde
fghij
klmno
'''
f = open('1.txt', 'r')
print(f.read(11)) # 只读取11个字节,换行符 \n 占一个字节 , 此时文件指针指向第11个字符
abcde
efghi
print(f.read()) # 默认为读取所有,从文件指针开始到文件最后
klmno
f.close()
3.2 readlines()
- 语法:
文件名.readlines()
读取文件全部,每行为一个列表元素,最后以一个列表显示 - 代码
f = open('1.txt', 'r+')
content = f.readlines()
print(content)
['12345\n', '67891\n', '12345\n']
3.3 readline()
- 语法:
文件名.readline()
每次读取一行 - 代码
con = f.readline()
print(con) # 12345
con = f.readline()
print(con) # 67891
3.4 文件指针移动 seek()
- 语法
文件对象.seek(偏移量 起始位置)
起始位置:
- 0: 开头
- 1: 当前位置
- 2: 结尾
4. 文件备份
4.1 需求
对输入文件备份,新备份文件名称改为 文件名[备份].后缀
4.2 步骤分析
- 用户输入
- 生成新备份文件,称改为 文件名[备份].后缀
- 对内容复制
4.3 代码
# 1. 用户输入备份文件名
old_name = input('请输入备份文件名:')
# 2. 生成空的备份文件,名称为 文件名[备份]
part = old_name.rpartition('.')
# 4. 优化:对输入文件名判断
if len(part[0]) > 0:
prefix = part[0]
new_name = prefix + '[备份]' + part[1] + part[2] # 对于 .txt文件 会报错,没有prefix变量
# print(new_name)
# 3. 将旧文件复制到新文件中
old_f = open(old_name, 'rb') # 注意以二进制读入,避免格式出错
new_f = open(new_name, 'wb') # 注意以二进制写入,避免格式出错
while True: # 防止因文件过大而不能读入
con = old_f.read(1024) # 循环以1024字节读入
if len(con) == 0: # 当读完时,con长度为0,此时停止读入
break
new_f.write(con) # 对读入文件写入
old_f.close()
new_f.close()
open(old_name, ‘rb’) # 注意以二进制读入,避免格式出错
5. 文件及文件夹操作
# 引入文件
import os
# 1. 文件/文件夹 重命名
os.rename('1.txt','2.txt')
# 2. 文件 删除
os.remove('2.txt')
# 3. 创建文件夹
os.mkdir('aa')
# 4.1 删除文件夹,只能删除空文件夹
os.rmdir('aa')
# 4.2 删除非空文件夹,递归删除多个文件夹且不为空
import shutil
shutil.rmtree('aa')
# 5. 当前文件工作目录
os.getcwd()
# 6. 改变当前工作文件夹
os.chdir('aa')
os.mkdir('bb')
# 7. 获取文件目录
print(os.listdir())
6. 批处理修改文件名称
import os
# 先找出该文件夹下所有文件名称,通过listdir()
dir_list = os.listdir()
# 加判断条件 flag = 1 为添加, flag = 2 为删除
flag = 2
# 循环批处理修改名称
for i in dir_list:
if flag == 1:
new_name = 'Python_' + i
os.rename(i, new_name)
elif flag == 2:
l = len('Python_')
os.rename(i, i[l:])
总结
- 文件基本操作
- 打开 open()
- r / w / a
- 读取
- read(num) 读取num字节
- readlines() 读取全部
- reandline(num) 读取num行
- 写入 write()
- 关闭 close()
- seek(偏移量,起始位置)
- 打开 open()
- 文件及文件夹的操作
- rename
- remove
- mkdir
- rmdir
- getcwd
- listdir
- chdir
- 文件备份实验
- 文件批处理重命名实验