Python学习-0612

一、控制文件内指针的移动

coding:utf-8一:文件内指针移动的单位是什么?读出二进制解码得到的字符串:hello你好硬盘:                  0101010101101010101011010101010只有t模式下read(n),这个n代表的字符个数with open(‘a.txt‘,mode=‘rt‘,encoding=‘utf-8‘) as f:    data=f.read(6)    print(f.tell())print(data)了解:硬盘容量的本质就是能存多个二进制数bit8bit=>1Byte1024Byte = 1KB1024KB=1MB1024MB=1GB1024GB=1TB1GB=1024*1024*8with open(‘a.txt‘,mode=‘rb‘) as f:    data=f.read(8)    print(type(data))    print(len(data))    print(data.decode("utf-8"))with open(‘b.txt‘,mode=‘rb‘) as f:    data=f.read(7)    print(type(data))    print(len(data))    print(data.decode("gbk"))r+awith open(‘a.txt‘, mode=‘r+t‘, encoding=‘utf-8‘) as f:    f.truncate(7)除此之外,所有的被动的、主动的文件指针移动的单位都是字节的个数二: 主动/单纯地控制文件指针移动f.seek(x,y)x代表的是移动的字节个数y代表的模式:0:代表参照物是文件开头,可以在t模式和b模块下使用示范:with open(‘d.txt‘, mode=‘rt‘, encoding=‘utf-8‘) as f:    f.read(3)    print(f.tell())  # 5    f.seek(3, 0)    print(f.tell())  # 31:代表参照物是当前位置,只能在b模式下用with open(‘d.txt‘, mode=‘rb‘) as f:    f.read(1)    print(f.tell()) # 1    f.seek(2,1)    print(f.tell()) # 3    # print(f.read().decode("utf-8"))2:代表参照物是文件末尾,,只能在b模式下用with open(‘d.txt‘, mode=‘rb‘) as f:    f.seek(3333, 2)    print(f.tell()) # 14+3333=3347    f.seek(-3, 2)    print(f.tell())    f.seek(0, 2)  # 快速将指针移动到文件末尾    print(f.tell())with open(‘d.txt‘, mode=‘a‘) as f:    print(f.tell())开发如下命令:tail -f access.logimport timewith open(r"/day10/代码/access.log", mode="rb") as f:    f.seek(0, 2)  # 快速将指针移动到文件末尾    while True:        line = f.readline()        if len(line) == 0:            time.sleep(0.1)        else:            print(line.decode(‘utf-8‘),end=‘‘)二、文件的修改
引入:硬盘数据没有改这么一说,都是用新内容覆盖老内容with open(‘e.txt‘, mode="r+t", encoding=‘utf-8‘) as f:    f.seek(9, 0)    f.write("你好")但是文件是可以修改的,但都是模拟出来的,如何实现,借助内存具体来说,有两种方式方式一原理:1、把硬盘内容全部读入内存,2、在内存中把内容一次性修改完毕3、然后把修改完毕的结果覆盖回原文件with open(‘f.txt‘, mode=‘rt‘, encoding=‘utf-8‘) as read_f:    data = read_f.read()    print(data)    res=data.06with open(‘f.txt‘, mode=‘wt‘, encoding=‘utf-8‘) as write_f:    write_f.write(res)总结方式一:优点:不费硬盘,硬盘数据只有一份缺点:费内存,文件过大时内存占用过多方式二原理:1、把硬盘内容全部读入内存,2、在内存中把内容一次性修改完毕3、然后把修改完毕的结果覆盖回原文件import oswith open(‘f.txt‘, mode=‘rt‘, encoding=‘utf-8‘) as read_f,\        open(".f.txt.swap",mode=‘wt‘,encoding=‘utf-8‘) as write_f:    for line in read_f:        write_f.write(line.replace("egon",‘===>EGON<===‘))os.remove(‘f.txt‘)os.rename(‘.f.txt.swap‘, ‘f.txt‘)总结方式二:优点:不费内存,内存同一时刻只有文件的一行内容缺点:费硬盘,在修改过程中硬盘上会同时存放两份数据
 

相关推荐