zoukankan      html  css  js  c++  java
  • 文件处理(2)

    文件处理

    open()

    f = open("文件路径","打开文件模式","指定的字符编码")

    f:文件句柄

    #del f

    f.close()  #回收操作系统的资源

    文件上下文处理:

    withopen ('文件路径','打开文件模式','指定的字符编码') as f:

    文件打开模式:

    r:只读:

      1.只读,不写

      2.文件不存在,就会取消

    w: 只写:

      1.只写,不读

      2.如果文件不存在,会创建新文件

      3.存在,清空再写

    a:追加写:

      1.只写,不读

      2.不存在,创建新文件

      3.存在,原据末尾添加新数据

    文件处理模式:

      t:文本模式

        只能与r、w、a连用

        默认情况下是rt模式

      b:bytes模式

        处理:二进制数据

        只能与r,w,a连用

    文件处理内置方法:

      读: f.read()  读文件,一次性读出所有文件

        f.readline()  一次读一行

        f.readlines() 全部读入内存,以换行符分隔,存入列表

        f.readable()  是否可读

      写:

        f.write()  写文件

        f.writeable ()  判断是否可写

        f.writelines()   for + f.write

      
    文件模式的补充:

      "r w a" 纯净模式

      r+,w+,a+:可读可写

    可以先读后写

    但是不可以先写后读

    文件内光标的移动:

      f.read('字符位数')

    提供了一种查看源码和文档的方式:

      f.seek(3,0)_doc_

      f.seek(offset,whence)

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

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

      0:从文件开头

      1: 从当前位置     .decode()方法

      2:从文件末尾

    补充:

      utf—8:

        中文是三个bytes

        英文是一个bytes

      rt:

        read里参数针对字符

        其他都是针对字节

      gbk:

        全是二个bytes

      不设置encoding,默认是gbk

      与encode无关,encoding只是参数

    例题:模拟日志功能

    # 写入文件
    import time
    
    res = time.strftime('%Y-%m-%d %H-%M-%S')
    
    with open(r'file/aa.txt', 'a', encoding='utf-8') as f:
        for i in range(100):
            f.write(f'{res}: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你!
    ')
    import time
    
    with open(r'file/aa.txt', 'r', encoding='utf-8') as f:
        f.seek(0, 2)
        while True:
            time.sleep(60)
            re = f.readline()
            if re:
                print(re, end='')
    aa.txt文件
    019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你! 2019-11-08 21-06-03: 阿姆斯特朗螺旋手里超喜欢超喜欢超喜欢你!

      

    修改文件方式:

    # 修改文件
    # 第一种方式
    # with open(r'file/a.txt', 'r', encoding='utf-8') as f:
    #     data = f.readline()
    #     print(data)
    #     print(type(data))
    # with open(r'file/a.txt', 'w', encoding='utf-8') as f:
    #     res = data.replace('asd', '姚某人')
    #     print(res)
    #     f.write(res)
    #
    
    # 第二种方式
    import os
    
    with open(r'file/a.txt', 'r', encoding='utf-8') as rf, 
            open(r'file/a1.txt', 'w', encoding='utf-8') as wf:
        data = rf.read()
        re = data.replace('asd', '姚某人')
    
        sum1 = wf.write(re)
        print(sum1)
        # print(1)
    os.remove(r'file/a.txt')
    os.rename(r'file/a1.txt', r'file/a.txt')
    # print(1)
    这里导入了一个os包,调用了remove()方法,调用了rename()
    a.txt
    
    
    你是谁啊asd你是谁啊
    执行后:
    a.txt
    
    你是谁啊姚某人你是谁啊
  • 相关阅读:
    git 命令行下浏览器tig使用记录
    根据进程名字杀死进程
    centos7 在线安装postgresql9.5
    HttpClient使用代理访问
    nmap查看服务器端口使用情况
    java后台启动jar包
    不同语言,系统通过共享内存方式实现信息交互
    释放 MappedByteBuffer映射的内存
    Java使用ByteBuffer读取大文件
    Java共享内存
  • 原文地址:https://www.cnblogs.com/godlover/p/11823317.html
Copyright © 2011-2022 走看看