• Python3-2020-测试开发-23- 文件操作


    一、文件分类

    """文本文件和二进制文件"""

    # 文本文件
    # 文本文件存储的是普通的“字符”文本,python默认为unicode字符集(两个字节表示一个字符),最多可以表示65536个

    # 二进制文件
    # 二进制文件把数据内容用“字节”进行存储,无法用记事本打开

    二、文件打开方式

    # 打开的方式
    # r----------------读read模式
    # w----------------写write模式,如果文件不存在则创建,如果文件存在,则重写新内容
    # a----------------追加append模式,如果文件不存在则创建,如果文件存在则在文件末尾追加新内容
    # b----------------二进制模式(可与其他模式组合使用)
    # +----------------读写模式(可与其他模式组合使用)

    三、文件操作

    # 常用编码
    # python默认的是Unicode编码UTF-8,os操作系统默认为GBK
    # f = open(r"xxxx","w",encoding="utf-8")
    # 这样即可使用utf-8打开文件
    
    
    # write 和 writelines()写入数据
    # writelines(l)把字符串列表写入文件中,不添加换行符
    # write(s):将字符串s写入文件
    # writelines(['褚01
    ','褚02
    ','褚03'])
    
    
    # 文件的读取
    
    # read([size]):从文件读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件,读取至文件尾,会返回空字符串
    # readline(),读取一行作为结果返回,读取到文件末尾,会返回空字符串
    # readlines(),文本文件中,每一行作为一个字符串存入列表中,返回该列表的

    1. 文件内容如下:在文件末尾添加#0   #1   #2

    褚01
    褚02
    褚03

    方法:enumerate

    l = ['a','b',"c"]
    
    l1 = enumerate(l)
    
    print(l1)
    print(list(l1))
    ——————————————————————————————————
    <enumerate object at 0x00000232F8B74A20>
    [(0, 'a'), (1, 'b'), (2, 'c')]
    
    

    实现方式:
    import os
    
    path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
    # ('C:\chushujin\study\mypythonscript\src\com.csjin.qa2020\TestException', 'Test02.py')
    print(path)
    
    path_txt = os.path.join(path,"test.txt")
    
    
    """
    将文件中的每行末尾加一个  #index
    褚01 #0
    褚02 #1
    褚03 #2
    """
    
    with open(path_txt,"r",encoding="utf-8") as f:
    
        lines = f.readlines()
        使用推导式数列
        lines = [line.rstrip() + "#"+ str(index)+"
    " for index,line in enumerate(lines)]
    
        print(lines)
    
    with open(path_txt,"w",encoding='utf-8') as f:
    
        f.writelines(lines)
    输出:
    褚01#0
    褚02#1
    褚03#2

     2. 二进制方式的读取与写入

    """二进制方式读取和写入"""
    
    with open("1.jpg","rb") as f:
    
        with open("1.copy.jpg","wb") as w:
    
            for line in f.readlines():
    
                w.write(line)

    四、seek()方法

    # seek(offset[,whence])
    # 把文件指针移动到新的位置,offset表示相对于whence的位置;
    # whence不同的值代表不同的含义:
    # 0-----表示从头开始计算
    # 1-----从当前位置开始计算
    # 2-----从文件尾开始计算

    # tell()返回文件指针的当前位置


    test.txt
    我爱你我爱你
    哈哈哈哈哈
    哦哦哦哦哦哦

    代码:

    with open("test.txt","r",encoding="utf-8") as f:
    
        print("文件名为:{0}".format(f.name))
        print("指针位置为:{0}".format(f.tell()))
        print("读取的内容为:{0}".format(f.readlines()))
        print(f.tell())
        f.seek(0,0)
        print("读取的内容为:{0}".format(f.readlines()))
    输出:
    文件名为:test.txt
    指针位置为:0
    读取的内容为:['我爱你我爱你
    ', '哈哈哈哈哈
    ', '哦哦哦哦哦哦
    ']
    57
    读取的内容为:['我爱你我爱你
    ', '哈哈哈哈哈
    ', '哦哦哦哦哦哦
    ']

    五、pickle序列化

    import pickle
    
    a1 = "褚01"
    a2 = 18
    a3 = [11,22,33]
    
    
    with open("data.dat","wb") as f:
    
        pickle.dump(a1,f)
        pickle.dump(a2,f)
        pickle.dump(a3,f)
    
    with open("data.dat","rb") as f:
    
        l1 = pickle.load(f)
        l2 = pickle.load(f)
        l3 = pickle.load(f)
    
        print(l1);print(l2);print(l3)
    输出:
    褚01
    18
    [11, 22, 33]


  • 相关阅读:
    JS中this指向问题(const self = this)
    nuxt.js中koa2写接口顺序
    关于Vue中的slot-scope="scope"
    Nuxt.js 中设置 div的css的 height 为100%
    nuxt报错:[nuxt] store/index.js should export a method that returns a Vuex instance.
    解决element UI中当value初始值存在空值时select只显示初始值,不显示placeholder值
    CSS控制一行显示两个li
    原生JS实现列表子元素顺序反转的方法分析
    Javascript 字符串全排列组合方法实现
    mysql引擎
  • 原文地址:https://www.cnblogs.com/chushujin/p/13183837.html
Copyright © 2020-2023  润新知