zoukankan      html  css  js  c++  java
  • 文件的三种打开模式

    文件的三种打开模式

    文件操作的基础模式有三种(默认的操作模式为r模式):

    • r模式为read
    • w模式为write
    • a模式为append

    文件读写内容的格式有两种(默认的读写内容的模式为b模式):

    • t模式为text
    • b模式为bytes/

    需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。

    一、文件打开模式之r模式

    r: read,只读模式,只能读不能写,文件不存在时报错。

    f = open('32.txt', mode='r')  # 报错
    f.write()
    f.close()
    
    # rt: read by text
    # windows的操作系统默认编码为gbk,因此需要使用utf8编码
    f = open('32.txt', mode='rt', encoding='utf8')
    data = f.read()
    print(data)
    print(f"type(data): {type(data)}")
    f.close()
    
    aaa
    bbb
    ccc
    nick最帅吗
    type(data): <class 'str'>
    
    # rb: read by bytes
    f = open('32.txt', mode='rb')
    data = f.read()
    print(data)
    print(f"type(data): {type(data)}")
    f.close()
    
    b'aaa
    bbb
    ccc
    nickxe6x9cx80xe5xb8x85xe5x90x97'
    type(data): <class 'bytes'>
    

    f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。

    f = open('32.txt', mode='rt', encoding='utf8')
    data1 = f.read()
    data2 = f.read()
    print(f"data1: {data1}")
    print(f"data2: {data2}")
    f.close()
    
    data1: aaa
    bbb
    ccc
    nick最帅吗
    data2: 
    

    由于f.read()一次性读取文件的所有内容,如果文件非常大的话,可能会造成内存爆掉,即电脑卡死。因此可以使用f.readline()/f.readlines()读取文件内容。

    # f.readline()/f.readlines()
    f = open('32.txt', mode='rt', encoding='utf8')
    print(f"f.readable(): {f.readable()}")  # 判断文件是否可读
    data1 = f.readline()
    data2 = f.readlines()
    print(f"data1: {data1}")
    print(f"data2: {data2}")
    f.close()
    
    f.readable(): True
    data1: aaa
    
    data2: ['bbb
    ', 'ccc
    ', 'nick最帅吗']
    

    二、文件打开模式之w模式

    w: 只能写,不能读,文件存在的时候回清空文件后再写入内容;文件不存在的时候会创建文件后写入内容。

    # wt
    f = open('34w.txt', mode='wt', encoding='utf8')
    print(f"f.readable(): {f.readable()}")
    f.write('nick 真帅呀
    ')  # '
    '是换行符
    f.write('nick,nick, you drop, I drop.')
    f.write('nick 帅的我五体投地')
    f.flush()  # 立刻将文件内容从内存刷到硬盘
    f.close()
    
    f.readable(): False
    
    # wb
    f = open('34a.txt', mode='wb')
    f.write('nick 帅的我五体投地'.encode('unicode_escape'))  # 编码成bytes类型
    print(
        f"type('nick 帅的我五体投地'.encode('unicode_escape')): {type('nick 帅的我五体投地'.encode('unicode_escape'))}")
    f.close()
    
    type('nick 帅的我五体投地'.encode('unicode_escape')): <class 'bytes'>
    

    三、文件打开模式之a模式

    a: 可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

    # at
    f = open('34a.txt', mode='at', encoding='utf8')
    print(f"f.readable(): {f.readable()}")
    f.write('nick 真帅呀
    ')  # '
    '是换行符
    f.write('nick,nick, you drop, I drop.')
    f.write('nick 帅的我五体投地')
    f.close()
    
    f.readable(): False
    

    四、文件打开读取二进制

    b模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的,需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。

    try:
        import requests
    
        response = requests.get(
            'https://www.baidu.com/img/bd_logo1.png?qua=high&where=super')
        data = response.content
    
        f = open('mv.jpg?x-oss-process=style/watermark', 'wb')
        f.write(data)
        print('done...')
        f.close()
    except Exception as e:
        print(e, '报错了,那就算了吧,以后爬虫处会详细介绍')
    
    done...
    
    f = open('34w.txt', 'wb')
    f.write('nick 好帅啊'.encode('utf8'))
    f.close()
    
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/Dr-wei/p/11871553.html
Copyright © 2011-2022 走看看