一、文件的操作模式
a模式:追加写入
# temp.txt # 111222333 with open('temp.txt', 'a', encoding='utf-8') as f: f.write('new msg') # 结果:111222333new msg
文件的复制:就是先读再写
# 文本类型文件的复制 r = open('source.txt', 'r', encoding='utf-8') w = open('target.txt', 'w', encoding='utf-8') for line in r: # 遍历就是一行一行读 取读文件的流 w.write(line) w.flush() # 将写入到内存中的数据刷新到硬盘中 w.close() r.close() # 1.将内存中剩余的数据刷新到硬盘中,2.释放文件资源
with open:将文件的释放交给with管理
with open('文件', '模式', encoding='utf-8') as f: pass # 操作
示例:文件追加
with open('source.txt', 'r', encoding='utf-8') as f1: with open('target.txt', 'a+', encoding='utf-8') as f2:
for line in f1: f2.write(line)
如果复制非文本类型的数据文件?
从模式采用b模式,不需要关心编码问题
with open('source.mp4', 'rb') as f1: with open('target.mp4', 'wb+') as f2: # rb+ | wb | wb+ | ab | ab+ for line in f1: f2.write(line)
模式汇总
主模式:
r: 读
w: 写(无创建,有清空)
a: 追加(文件不存在则创建)
x: 新建写(文件存在则报错) 从模式:不能独立存在
t: 文本操作(默认模式) r=>rt w=>wt a=>at
b: 非文本文件必须采用二进制模式来处理
+: 可读可写 文件操作模式:
r+: 不会创建文件的可读可写
w+:创建清空文件的可读可写
a+:创建不清空文件(追加)的可读可写rb: 二进制读
wb:创建清空文件的二进制写
ab: 创建不清空文件(追加)的二进制写rb+ | wb+ | ab+
二、游标操作
必须在b模式下操作,seek中偏移的是字节
1. 如何使用游标:游标的相关方法
2. 游标相关的读写操作
3. 根据游标在大文件中取出多个指定位置的部分字节内容 #百度网盘 - 秒传
seek(偏移量, 偏移位置)
偏移量:移动的字节数,是结合模式1,2偏移,负数往左(开头)移动,正数往右(末尾)移动
偏移位置:
0 -- 文件开头(0:兼容t模式)
1 -- 当前位置
2 -- 文件末尾
with open('source.txt', 'r+', encoding='utf-8') as f: f.read() print(f.tell()) # 获取游标位置:2620(文件末尾) f.seek(0, 0) # 将游标移动到文章开始 print(f.tell()) # 0
脚本文件:直接用python解释器运行该文件
文件test.py
import sys # sys.argv: 存放当前文件作为脚本文件执行的参数们,数据类型为<class 'list'> print(sys.argv) pycharm运行: ['文件路径 est.py'] cmd: C:UsersASUS>python3 '文件路径 est.py' 参数1 参数2 ... ['文件路径 est.py', '参数1', '参数2',...] # 参数以空格分隔,第一个参数为文件路径,后面为传入参数
裁剪文件:可读可写模式下
with open('source.txt', 'r+', encoding='utf-8') as f: print(f.readable()) # 判断文件是否可读:True print(f.writable()) # 判断文件是否可写:True f.truncate(10) # source.txt文件内容 # 裁剪前:1234567890***** # 裁剪后:1234567890