文件操作模式

一、文件的操作模式

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
原文地址:https://www.cnblogs.com/zhouyongv5/p/10620701.html