DAY08、文件操作

一、文件操作模式汇总:

主模式:

r:读模式

w:写模式(无创建,有清空)

a:追加(有创建的功能)

x:写,必须自己创建文件,否则报错

从模式:

t:文本操作(默认模式)r >rt,w>wt,a>at

b:非文本文件采用二进制模式来处理   (rb:二进制读 |wb:创建清空文件的二进制写 |ab:创建不清空文件(追加)的二进制写)

+:可读可写

r+:不会创建文件的可读可写

w+:创建清空文件的可读可写

a+:创建不清空文件(追加)的可读可写,在原数据后追加写入新数据

二、文件的复制:先读再写

1、 例: 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()

2、用with open 处理

# r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
          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)

3、复制非文本类型的数据文件?

# 从模式采用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)

三、游标操作:必须在b模式下操作

方法:seek(偏移量,偏移位置)

偏移量:移动的字节数,负数是结合模式1,2往前移

偏移位置:0:从文件开始位置开始偏移

1:从当前游标位置开始偏移

2:从文件末尾开始偏移

例:# 游标读

with open('source.txt', 'rb') as f:
                    d1 = f.read(11)
                     print(d1)

#当前游标位置

print(f.tell())

# 游标操作 - 从末尾位置开始
                   f.seek(-3, 2)
                   d2 = f.read()
                   print(d2.decode('utf-8')) # 890

#  游标操作 - 从当前位置开始
                   f.seek(-3, 1)
                   d2 = f.read()

# 游标操作 - 从头开始
                      f.seek(3, 0)
                     d2 = f.read()
                      print(d2)

# 游标写:会覆盖书写
                   with open('source.txt', 'rb+') as f:
                          f.seek(11)
                          print(f.read())

f.write(b'000')

上一篇:模拟银行ATM系统(基础版)


下一篇:使用VSTS的Git进行版本控制(六)——拉取请求