zoukankan      html  css  js  c++  java
  • 操作文件的方法

    1、重点

    读文件

    f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾
    
    f.readline() # 读取一行内容,光标移动到第二行首部
    
    f.readlines() # 读取每一行内容,存放于列表中
    
    f.read()与f.readlines() #都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:
    # 方式一
    with open('a.txt',mode='rt',encoding='utf-8') as f:
        for line in f:
            print(line) # 同一时刻只读入一行内容到内存中
    # 方式二
    with open('1.mp4',mode='rb') as f:
        while True:
            data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
            if len(data) == 0:
                break
            print(data)

    写操作
    f.write('1111
    222
    ')  # 针对文本模式的写,需要自己写换行符
    f.write('1111
    222
    '.encode('utf-8'))  # 针对b模式的写,需要自己写换行符
    f.writelines(['333
    ','444
    '])  # 文件模式
    f.writelines([bytes('333
    ',encoding='utf-8'),'444
    '.encode('utf-8')]) #b模式

    2、主动控制文件内指针移动

    with open('林允儿.txt','r',encoding='utf8')as f:
        print(f.read(6)) #'r'默认为rt,r读取6个字符
    with open('林允儿.txt','rb')as f:
        print(f.read(3)) # rb读取3个bytes

    f.seek(offset,whence)

    offset: 相对偏移度 (光标移动的位数)针对的是字节

    whence:指定光标位置从何开始

    0:从文件开头

    1:从当前位置

    2:从文件末尾

    补充:

    utf-8:

    中文是3个bytes

    英文是1个bytes

    gbk:

    中文是2个bytes

    英文是1个bytes

    open函数不设置encoding,默认是gbk

    与encode一毛钱都没有,encoding只是一个参数

    除了read里面的参数是针对字符,其他都是针对字节

    with open('林允儿.txt','rb')as f: #默认打开文件的编码是gbk
        f.seek(3,0)  # 光标指在3个字节后面, 因为是rb,如果是rt就是指在3个字符后面
        print(f.tell()) # 打印出光标指在的位置
        print(f.read(2))

    解码:

    with open('林允儿.txt',mode='rb') as f:
        f.seek(3,0)
        print(f.tell())
        print(f.read(3).decode('utf8')) # 读了3个字节,解码成utf8后就是一个中文字的字节

    编码:

    with open('林允儿.txt','r') as f:
        f.seek(3,0)
        print(f.tell())
        print(f.read(2).encode('gbk')) # r是读字符,,所以读了2位字符后编码成gbk,所以就是4个字节

    1模式:

    with open('林允儿.txt','rb')as f:
        f.seek(3,1)   # 1就是当前光标位置
        print(f.tell())
        print(f.read(3).decode('utf8')) # 文档怎么编码就用什么解码

    2模式:

    with open('林允儿.txt',mode='rb') as f:
        f.seek(-6,2)  # 2是光标位置在末尾,-x:往前x字节
        print(f.tell()) #光标目前所在的位置,从前往后数
        print(f.read(5).decode('utf8')) # read是往后读

    写入文件:

    import time
    
    res = time.strftime('%Y-%m-%d %H:%M:%S')
    
    with open('林允儿.txt','a',encoding='utf-8')as f:
        for i in range(5):
            f.write(f'{res}:sean老师手下留情
    ')

    修改文件内容:

    方案一:

    with open('林允儿.txt','r',encoding='gbk') as f:
        data = f.read()
        print(data)
        print(type(data))
    with open('林允儿.txt','w',encoding='gbk') as f:
        res = data.replace('查楚文','大大')
        f.write(res)

    方案二:

    import os  # os模块 在修改文件和重命名等操作时都要加
    
    with open('林允儿.txt','r')as rf,
            open('作业2.txt','w')as wf:
        data = rf.read()
        res = data.replace('大大', '查楚文')
        wf.write(res)
    
    os.remove('林允儿.txt')
    os.rename('作业2.txt','b.txt')

    获取实时动态:

  • 相关阅读:
    JS 心得总结
    zk 隐藏网页文件后缀
    zk label控件内容换行
    ZK 代码自动提示
    zk 获取session,request,servletContext,response
    zk回车事件
    zk jquery的使用
    zk listbox 点击列标题实现排序功能
    Django框架学习----视图与模板(最新文章实现)
    Django框架学习----视图与模板(分页功能)
  • 原文地址:https://www.cnblogs.com/hyukoh/p/11822900.html
Copyright © 2011-2022 走看看