文件I\O操作二

一、文件高级及函数基本使用

  X模式(了解)(只写模式;不可读;不存在创建,存在则报错)

  b模式:

b模式:1.读写都是以bytes格式
      2.可以针对所有文件
      3.一定不能指定字符编码,(即一定不能指定encoding参数)

with open(r'C:\Users\WYC\Desktop\微信图片_20210105145847.jpg',mode='rb') as f:
    f.read()  # 硬盘二进制存入内存,在b 模式下,不做任何改变,是什么样的读出来的就是什么样

with open(r'a.txt',mode='wb') as f:
    f.write('你好,world'.encode('utf-8'))
#循环读取文件
#方式一:自己控制每次循环的读取量
with open(r'IMG_1279.PNG',mode='rb') as f:
    while True:
        res = f.read(1024)  # 以1024个字节读取文件
        if len(res)==0:
            break
        print(len(res))

# 方式二:以行为单位读取,当一航文件内容过大时,内存会过载
with open(r'IMG_1279.PNG',mode='rb') as f1:
    for line in f1:
        print(len(line),line)

二、其他操作方法

读相关操作
  # 内容过大时,容易导致内存溢出
with open(r'a.txt',mode='rt',encoding='utf-8') as f:
    # res=f.readline()  # 一次只读一行
    # print(res)
    # res1=f.readlines()  # 多行一起读,生成一个列表,
    # print(res1)

#写相关操作
with open(r'a.txt',mode='wt',encoding='utf-8') as f:

    # l=['123\n','234\n','14314\n']  # 如果是纯英文,可以直接加前缀b得到bytes类型
    # l=[b'123',
    #    b'234',
    #    b'14314']
#  如果有其他字符
    l = [
        bytes('你好',encoding='utf-8'),
        bytes('中国',encoding='utf-8'),
         ]
    f.writelines(str(l))  # 相当于一个列表

控制文件指针操作:
指针移动的单位都是以bytes/字节为单位
只有一种特殊情况:t模式下的read(n),是以字符为单位移动的(n)代表字符个数

f.seek():
f.seek(n,模式:n指的是移动的字节个数
模式:  0 参照物是文件的开头位置(只有0模式可以在t模式下使用);
      1 参照物是当前位置;
      2 参照物是文件末尾位置,移动时需要倒着移动

f.tell  # 告诉你指针当前位置

 

posted @ 2021-01-05 22:37  HolmesWu  阅读(59)  评论(0编辑  收藏  举报