• 文件处理


    打开文件的方式

    方式一:

    1. 打开文件,得到一个句柄并赋值给一个变量
    f=open("aa","r",encoding="utf8")
    2. 通过句柄对文件进行操作
    data=f.read()
    3. 关闭文件
    f.close()

    方式二:

    with open("aa","r",encoding="utf8") as f:
        data=f.read()

    打开文件的模式

    r,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a,追加写模式【不可读;不存在则创建;存在则只追加内容】
    
    rb,二进制只读模式
    wb,二进制只写模式
    ab,二进制追加模式
    
    "+" 表示可以同时读写某个文件
    r+, 读写【可读,可写】
    w+,写读【可读,可写】
    a+, 写读【可读,可写】
    
    x, 只写模式【不可读;不存在则创建,存在则报错】
    x+ ,写读【可读,可写】
    xb

    操作文件的方式

    f.read() #读取所有内容,光标移动到文件末尾
    f.readline() #读取一行内容,光标移动到第二行首部
    f.readlines() #读取每一行内容,存放于列表中
    
    f.write('1111
    222
    ') #针对文本模式的写,需要自己写换行符
    f.write('1111
    222
    '.encode('utf-8')) #针对b模式的写,需要自己写换行符
    f.writelines(['333
    ','444
    ']) #文件模式  自己写换行符

    文件的光标问题

    f.seek()
    f.seek(0) 从文件开头重新开始读取
    s.seek(offset,whence=0)
    offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
    whence:可选,默认值为 0。
    seek(0,0) 默认移动到文件开头或简写成seek(0)
    seek(x,1) 表示从当前指针位置向后移x(正数)个字节,如果x是负数,则是当前位置向前移动x个字节
    seek(x,2) 表示从文件末尾向后移x(正数)个字节,如果x负数,则是从末尾向前移动x个字节
    
    典型的例子:模仿tail -f 
    import time
    with open('test.txt','rb') as f:
        f.seek(0,2) #将光标移动到文件末尾,再向后移动0个字节数 从文件末尾开始读
        while True:
            line=f.readline()
            if line:
                print(line.decode('utf-8'))
            else:
                time.sleep(0.2)

    修改文件的方式

    import os
    #以只读的方式打开源文件 以写的方式创建新的文件
    with open('aa.txt','r',encoding='utf-8') as r_f,open('bb.txt','w',encoding='utf-8') as w_f:
        for line in r_f: #将源文件内容写入新文件  并且修改
            if line.startswith('你好'):
                line='修改了
    '
            w_f.write(line)
    #目前就有了两个文件,但是只需要一个修改后的文件,原理就是删除源文件,将新文件重命名
    ##删除和重命名文件
    os.remove('aa.txt')
    os.rename('bb.txt','aa.txt')

    二进制方式操作文件

    读出二进制文件的方法:
    with open('aa','rb') as f:
        print(f.read())
        f.seek(0)
        print(f.read().decode('gbk')) #windows上是gbk
    '''
    b'xbbxb9xd3xd0xcaxabxbaxcdxd4xb6xb7xbd
    '
    还有诗和远方
    '''

    写入二进制文件的方法:

    with open("aa","wb") as f:
        f.write("还有诗和远方
    ".encode("utf8"))

    使用二进制方式,保存图片

    with open('ff.jpg','rb') as read_f,
            open('wuwu_new.jpg','wb') as write_f:
        write_f.write(read_f.read())
  • 相关阅读:
    398. Random Pick Index
    382. Linked List Random Node
    645. Set Mismatch
    174. Dungeon Game
    264. Ugly Number II
    115. Distinct Subsequences
    372. Super Pow
    LeetCode 242 有效的字母异位词
    LeetCode 78 子集
    LeetCode 404 左叶子之和
  • 原文地址:https://www.cnblogs.com/lazyball/p/11648131.html
Copyright © 2020-2023  润新知