2.5 - 文件和目录
2.5.1 文件
python中的文件,从编码格式的角度,分为:二进制文件和文本文件。文本文件包含:txt,html,json等。二进制文件包含:图片,音频,视频等。
文本文件可以通过二进制的方式读写,但是二进制文件未必能够用文本文件的方式读写。
2.5.2 文件读取和路径操作
1) 读文件
# mode:读r,写w,以二进制方式b,读写+ with open(r'./book.txt', mode='rb+') as file: print(file.readline()) # 读取一行 # encoding:以 utf-8 的方式编码解码 with open(r'./book.txt', mode='r+', encoding='utf-8') as file: print(file.readlines()) # 读取所有行
以 with 的方式打开一个文件读写流,该结构执行完后会自动关闭,不用手动调用 .close() 方法关闭文件流。
2)路径操作
# 路径操作 import os # 返回当前工作目录 print(os.getcwd()) # 返回某个path下的文件和目录 print(os.listdir(os.getcwd())) # 创建单级目录 os.mkdir(r'./Dir1') # 递归创建多级目录,exist_ok=True时,如果中间目录存在不会报错,exist_ok=False时,如果中间目录存在会报错。 os.makedirs(r'./Dir1/Dir2/Dir3/Dir4', exist_ok=True) # 删除path对应的文件 os.remove(r'./book.txt') # 删除path对应的多级空目录 os.removedirs(r'./Dir1/Dir2/Dir3/Dir4') # os.path.dirname() + os.path.basename() => 文件的完整目录(相对路径 或 绝对路径) path = './Dir1/p11.py' os.path.exists(path) # 判断path路径是否存在 dirname, basename = os.path.split(path) # 返回一个元组 (dirname, basename) os.path.dirname(path) os.path.basename(path)
os.path.join(dirname, basename)
一个文件的路径包含两部分: dirname + basename。
3)灵活读取文件a.txt到文件b.txt
import os dir_name = r'./' # 读取文件所在目录 base_name1 = r'book.txt' # 读取文件名 dest_name = r'./book_cp.txt' # 复制文件path src_path = os.path.join(dir_name, base_name1) d_name, b_name = os.path.split(dest_name) # 预处理复制文件的路径 if not os.path.exists(d_name): os.makedirs(d_name, exist_ok=True) if os.path.exists(src_path): fw = open(dest_name, mode='a', encoding='utf-8') with open(src_path, mode='r', encoding='utf-8') as file: for line in file: fw.write(line) fw.close()