open(file, mode=‘r’, buffering=-1, encoding_=None, errors=None, newline=None, closefd=True, opener=None)
t: 文本文件(默认)
b: 二进制文件
r: 只读
w: 如果文件不存在,就创建文件,如果文件存在就删除之前的内容,重新写入
a: 如果文件不存在,就创建文件,如果文件存在,就将要写入的文件追加到文件末尾
x: 不存在的时候创建,存在就报错,有写的功能
r+: 在读的基础上添加写的功能,无法操作不存在的文件
w+: 在写的基础上添加读的功能,文件不存在就创建
a+: 在追加的基础上添加读的功能,文件不存在就创建
1.读文件
1. 手动关闭
file_obj = open(file_name, ‘r’, encoding=‘UTF-8’)
file_obj.read()
file_obj.close()
file_name = "test/test.txt"
# 打开文件(文件名, 打开方式, 字符编码),获取文件对象
file_obj = open(file_name, 'r', encoding='UTF-8')
print(type(file_obj)) #<class '_io.TextIOWrapper'>
# 读取文件-- 文件返回值为字符串(为文件全部内容)
content = file_obj.read()
print(content)
# 关闭文件
file_obj.close()
2. 自动关闭
with open(file_name, ‘r’, encoding=‘UTF-8’) as file_obj:
content = file_obj.read()
# with open() as with结束,自动关闭文件资源
# 默认以文本的形式读取,而且把文本的所有内容全部读出,不管有多大
file_name = "test/test.txt"
file_content = ""
try:
with open(file_name, 'r', encoding='UTF-8') as file_obj:
# 默认以文本的形式读取,而且把文本的所有内容全部读出,不管有多大
# content = file_obj.read() # 参数默认是-1
# print(content)
chunk = 100 # 每次读取块的大小
while True:
content = file_obj.read(chunk) # 读取不到时返回空串
if not content: # 空串转换为bool 类型是 False
break
#print(content,end="")
file_content += content
print(file_content)
except FileNotFoundError as e:
print(e)
3. readline
line = file_obj.readline()
file_name = "test/test.txt"
file_content = ""
with open(file_name,'r', encoding='utf-8') as file_obj:
while True:
line = file_obj.readline() # 每次读取一行
if not line: #空串转化为 布尔值是 False
break
file_content += line
print(file_content, end="")
4. readlines
lines = file_obj.readlines()
- 所有的内容都将被读取,并封装进列表,列表中每一个元素都是一行数据
file_name = "test/test.txt"
file_content = ""
with open(file_name,'r', encoding='utf-8') as file_obj:
# 将所有的内容读取,并封装进列表,列表中每一个元素都是一行数据
lines = file_obj.readlines()
file_content = file_content.join(lines) # 将列表中元素拼接
print(file_content, end="")
5. for
for line in file_obj: 获取每一行数据
file_name = "test/test.txt"
file_content = ""
with open(file_name,'r', encoding='utf-8') as file_obj:
for line in file_obj: # 获取每一行数据
file_content += line
print(file_content, end="")
2. 写
1. 写文件
with open(file_name, ‘w+’, encoding=‘utf-8’) as file_obj:
r = file_obj.write(line): 返回值是写入的字符数/字节数
file_name = "test/test03.txt"
"""
r: 只读
w: 如果文件不存在,就创建文件,如果文件存在就删除之前的内容,重新写入
a: 如果文件不存在,就创建文件,如果文件存在,就将要写入的文件追加到文件末尾
x: 不存在的时候创建,存在报错,有写的功能
r+: 在读的基础上添加写的功能,无法操作不存在的文件
w+: 在写的基础上添加读的功能,文件不存在就创建
a+: 在追加的基础上添加读的功能,文件不存在就创建
"""
with open(file_name, 'w+', encoding='utf-8') as file_obj:
line = "你好,张三"
# write() 返回值是 写入的字符个数
r = file_obj.write(line)
print(r)
file_obj.write(",hahah")
2. 文件复制
1. t: 读取文本文件, size是以字符为单位
2. b: 读取二进制文件,size 是以字节为单位
"""
两种读取模式:
1. t: 读取文本文件, size是以字符为单位
2. b: 读取二进制文件,size 是以字节为单位
"""
file_name = "test/处处吻.flac"
# 复制文件
with open(file_name, 'rb') as file_obj:
file_new_name = "test/处处吻_02.flac"
with open(file_new_name, 'wb') as new_obj:
# 定义每次读取的大小
chunk = 1024 * 100 # 1K * 100
while True:
content = file_obj.read(chunk)
if not content:
break
new_obj.write(content)
3. 文件定位
"""
中文: 3 个字节
英文: 1个字节
tell(): 返回文件指针当前所在的位置(从开头计算)
seek(n): 从开头开始,将指针移到n处
seek(n, 0): 从开头开始,将指向后针移n个字节
seek(n, 1): 从当前开始,将指向后针移n个字节
seek(n, 2): 从结尾开始,将指向后针移n个字节
"""
with open("test/eng", 'rb') as file_obj:
file_obj.read(100)
print(file_obj.tell()) # 100
file_obj.seek(101)
print(file_obj.tell()) # 101
file_obj.seek(101, 0)
print(file_obj.tell()) # 101
file_obj.seek(101, 1)
print(file_obj.tell()) # 201
file_obj.seek(-101, 2)
print(file_obj.tell()) # 从文件末尾开始,指针移动 -101
4. 文件其他操作
import os
os.listdir(“目录路径”): 获取指定路径下的所有目录名,存入列表中
os.getcwd():获取当前工作路径
os.chdir(“路径”):切换当前工作路径
os.mkdir(“路径”):创建目录
os.rmdir(“路径”):删除目录
os.remove(“路径”):删除文件
rename(“旧名”, “新名”): 为文件重命名,也可移动文件,可linux 的 mv指令