zoukankan      html  css  js  c++  java
  • python-文件读写

    文件做的就是持久化保存数据 -> 文件保存硬盘或者磁盘
    内存的数据只有在程序运行时候存在

    对文件操作流程
    1.打开文件,得到文件句柄并赋值给一个变量
    2.通过句柄对文件进行操作
    3.关闭文件

    # data = open("test_file").read()
    data = open("test_file",encoding="UTF-8").read()  #有的操作系统编码格式是gdk,python3是UTF-8,读取不了,所以➕encoding默认读取格式为UTF-8
    print(data)
    访问模式说明
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    以下面这个文件来进行读取

    只读

    如果使用r模式打开文件 如果文件存在 直接打开
    如果文件不存在 会报错

    f = open("test_file",encoding="UTF-8")  #文件句柄,就是这个文件的内存对象,包含文件的名字、字符集、大小等
    data = f.read()
    data2 = f.read()
    print(data)
    print('data2',data2)   #data2读不到,data读到最后一行,data2是继续读,所以读不到。文件一遍读完就没了
    f = open("../test_file1.txt", "r")
    ret = f.read(4)  # 读了前4个字符
    print(ret)
    ret = f.read(4)  # 从上次读后的位置又读了4个字符
    print(ret)
    f.close
    f = open(file_name, "r")
    # 读取数据
    # 把每行的数据保存到列表中
    ret = f.readlines()
    print(ret)  # 列表的每个元素后会多一个
    
    f.close()
    f = open("test_file2",'r',encoding="UTF-8")
    # print(f.readlines())  #读出来是个列表,每行一个元素
    for line in f.readlines():
        print(line.strip())  #默认每行后面都有一个换行符,strip去掉空格和换行
    f = open("test_file2", 'r', encoding="UTF-8")
    print(f.readline())  # 读一行
    # 读多行
    for i in range(5):
        print(f.readline())

    只写

    如果使用w模式打开文件 如果文件存在 直接打开 会吧原来文件的数据清空
    如果文件不存在 会创建一个文件,然后打开

    默认情况下如果在windows电脑中(中国)保存中文,编码方式是gdk(mac电脑或者linux没有问题)

    如果其他字符 例如abcd 编码方式为utf-8

    f = open("test_file2",'w',encoding="UTF-8")  #没有写,默认就是r,读模式;w写,是创建一个文件,会覆盖之前的,这个只能写,不能读;
    f.write("桃之夭夭,灼灼其华。之子于归,宜其室家。
    ") 
    f.write("桃之夭夭,有蕡其实。之子于归,宜其家室。")

    追加

    f = open("test_file2",'a',encoding="UTF-8")  #a往后追加,不覆盖原来的文件,也不能读;
    f.write("
    桃之夭夭,其叶蓁蓁。之子于归,宜其家人。")
    f.close()

    当文件使用完毕后 请关闭文件(打开一个文件就需要消耗内存)
    f.close()
    无论以什么方式打开文件 都记得关闭文件

    f = open("test_file",'r',encoding="UTF-8")
    #第10行不打印
    #low loop
    for index,line in enumerate(f.readlines()):  #这个只适合文件不大的情况
        if index == 9:
            print("------分割线-------")
            continue
        print(line.strip())
    f = open("test_file",'r',encoding="UTF-8")
    #高效的循环方法
    count = 0
    for line in f:   #一行一行读,内存每次只存一行
        if count == 9:
            print("-------分割线------")
            count += 1
            continue
        print(line)
        count += 1
    f.close()
    f = open("test_file", 'r')
    print(f.tell())  # 指针所在位置
    print(f.readline())
    print(f.tell())  # tell是按字符计数的
    f.seek(0)  # 指针回到0
    print(f.encoding)  # 查看文件编码
    print(f.name)  # 查看文件名字
    print(f.readable())  # 判断文件是否可读
    print(f.writable())  # 判断文件是否可写
    print(f.closed)  # 判断文件是否关闭,返回true/false

    yayadeMac:~ ddc-test$ python3
    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
    [Clang 6.0 (clang-600.0.57)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> f = open("/Users/ddc-test/Downloads/pycharm/Ex_user/test_file2","w")
    >>> f.write("hello1 ")         #写入之后,打开文件并没有
    7
    >>> f.flush()     #打开之后有,实时刷新
    >>>

    以进度条为例:

    import sys,time
    for i in range(20):
        sys.stdout.write("#")
        sys.stdout.flush()   #如果不写这一行就是等缓存区满了一下刷出来
        time.sleep(0.1)
    f = open("test_file2",'a',encoding="UTF-8")
    # f.truncate()   #截断,不写会清空
    f.seek(15)
    f.truncate(21)  #从头开始截断,移动光标不好使

    读写

    f = open("test_file2",'r+')
    print(f.readline())
    f.write("-----------")   #依然写在了最后,读和追加的功能
    print(f.readline())

    写读

    f = open("test_file2",'w+')   #先创建一个文件
    print(f.readline())      #初始空
    f.write("-----1------
    ")
    f.write("-----2------
    ")
    f.write("-----3------
    ")
    f.write("-----4------
    ")
    f.seek(10)
    print(f.readline())
    f.write("hhhhhhhhh")    #依然在最后追加

    追加读写

    f = open("test_file2",'a+')

    二进制

    文件是以二进制编码的

    
    
    f = open("test_file2",'rb')   #二进制文件,以二进制格式读,这时不能传encoding
    f = open("test_file2",'wb')
    f.write("hello binary
    ".encode())
    f = open("test_file2",'ab')

    文件修改

    f = open("test_file2",'r')
    f_new = open("test_file2.bak",'w')
    for line in f:
        if "桃之夭夭" in line:
            line = line.replace("桃之夭夭","替换内容")
        f_new.write(line)
    f.close()
    f_new.close()

    with语句

    为了避免打开文件后忘记关闭,可以通过管理上下文,即
    with open('log','r') as f:
      ...
    如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
    支持同时对多个文件的上下文进行管理,即:
    with open('log1','r') as obj1,open('log2','r') as obj2:
      Pass

    with open("test_file2",'r') as f:
        print(f.readline())
    #with这段语句执行完毕后自动关闭文件
    with open("test_file1",'r') as f1,
         open("test_file2", 'r') as f2:

    文件备份

    # 做备份文件 -> 伪代码
    # 01 打开hm.txt文件
    old_f = open("hm.txt", "r")
    # 02 读取hm.txt文件的数据
    result = old_f.read()
    # 03 创建一个hm[复件].txt文件
    new_f = open("hm[复件].txt", "w")
    # 04 把从hm.txt读取的数据写入到hm[复件].txt文件中
    new_f.write(result)
    # 05关闭文件
    old_f.close()
    new_f.close()

  • 相关阅读:
    重读《从菜鸟到测试架构师》-- 职业生涯的考虑
    重读《从菜鸟到测试架构师》-- 从专家到高手
    重读《从菜鸟到测试架构师》-- 开发团队做的远不仅是开发
    重读《从菜鸟到测试架构师》-- 测试专家的第一步
    重读《从菜鸟到测试架构师》-- 前篇
    使用Nodejs+Protractor搭建测试环境
    简单的算法题之合并数组
    性能测试流程
    性能测试基础
    电脑木马
  • 原文地址:https://www.cnblogs.com/peiya/p/11978093.html
Copyright © 2011-2022 走看看