• python-持久化存储文件操作


    一、文件的基本操作

    # 1. 打开文件
    """
    mode:
        r: 只能读文件
        w: 只能写入(先清空文件内容)
        a+: 读写(文件追加写入内容)
        r+:读写(文件开头写入内容)
    """
    f = open('doc/hello',mode='r+')
    # 2. 文件读写操作
    f.write('javaaaaa\n')
    # 3. 关闭文件
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    在这里插入图片描述

    对上图做一个 解释:
    常用的mode有 r、w、a
    r: r是读操作,默认就有。(但是当mode变成其他类型时 就不一定了)
    w:涉及w的mode,无论是w还是w+,都会先清空文件中的内容
    a: a算是最温和的mode了,他不会清空文件中的内容。但是没有读权限。
    +:a+和r+都有读写操作。

    二、文件操作中的with语句

    由上述可知,在对文件进行open及读写操作后,最后要使用close关掉它,释放资源。
    这里就牵扯到文件的关闭:
    方法一: 调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
    并且操作系统同一时间能打开的文件数量也是有限的:

    方法二: Python引入了with语句自动帮我们调用close()方法:

    下面有两段代码理解一下:
    示例一:

    with open('doc/test',mode='w+') as f:
        f.write('javavaaaa\n')
        print(f.read())  
    
    • 1
    • 2
    • 3

    这里的结果为空,就是print读取不到结果,为什么呢?
    因为涉及到指针,当把javavaaaa添加进文件中后,指针指向了最后一个字符,他之后当然什么都没有,所以才输出为空。

    最后 对上述做一个总结:
    在这里插入图片描述

    with open('doc/test',mode='w+') as f:
        f.write('java\n')
        f.seek(0,0)
        print('当前指针的位置:',f.tell())
        f.seek(0,2)
        print('当前指针的位置:',f.tell())
        print(f.read())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    seek(offset, from)有2个参数: offset:偏移量 from:方向
    0:表示文件开头;
    1:表示当前位置;
    2:表示文件末尾

    三、os模块

    os,语义为操作系统,处理操作系统相关的功能,可跨平台。 比如显示当前目录下所有文件/删除某个文件/获取文件大小……

    import  os
    import platform
    # 1. 获取操作系统类型
    print(os.name)
    # 2. 获取主机信息,windows系统使用platform模块, 如果是Linux系统使用os模块
    """
    try: 可能出现报错的代码
    excpt: 如果出现异常,执行的内容
    finally:是否有异常,都会执行的内容
    """
    try:
        uname = os.uname()
    except Exception:
        uname = platform.uname()
    finally:
        print(uname)
    
    # 3.获取系统的环境变量
    envs = os.environ
    # os.environ.get('PASSWORD')
    print(envs)
    
    #4. 判断是否为绝对路径以及生成绝对路径
    print(os.path.isabs('D:\Program Files\pycharm\自动化运维项目\day04'))
    print(os.path.isabs('day05'))
    print(os.path.abspath('day06'))
    
    # 5. 目录名和文件名拼接
    # os.path.dirname获取某个文件对应的目录名
    # __file__当前文件
    # join拼接, 将目录名和文件名拼接起来。
    print(os.path.dirname(__file__))  ##获取当前文件的绝对路径
    print(os.path.basename(__file__))  ## 获取当前文件名
    BASE_DIR = os.path.dirname(__file__)
    setting_file = os.path.join(BASE_DIR,'hellooo.conf')
    print(setting_file)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    四、json模块

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

    python类型数据和JSON数据格式互相转换规则
    在这里插入图片描述

    import  json
    
    
    # 1. 将python对象编码成json字符串
    users = {'name':'westos', "age":18, 'city':'西安'}
    json_str = json.dumps(users)
    with open('doc/hello.json', 'w') as f:
        # ensure_ascii=False:中文可以成功存储
        # indent=4: 缩进为4个空格
        json.dump(users, f, ensure_ascii=False, indent=4)
        print("存储成功")
    print(json_str, type(json_str))
    
    # 2. 将json字符串解码成python对象
    with open('doc/hello.json') as f:
        python_obj = json.load(f)
        print(python_obj, type(python_obj))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    go语言 sync.Map原理
    舞蹈室如何打破拉新难的困境?
    C语言程序设计笔记(浙大翁恺版) 第六周:数据类型
    C++STL详解(三)list的使用及其模拟实现
    不调用三方收费接口,照样实现了识别图片为文字的功能
    pytorch 实现一个最简单的 GAN:用mnist数据集生成新图像
    Python入门教程 | Python 函数与参数
    1125:矩阵乘法《详解》
    神经网络模型的参数量和计算量
    如何使用摩尔信使MThings连接网络设备
  • 原文地址:https://blog.csdn.net/weixin_44717560/article/details/125398970