• python 的基础学习 第九天 文件的操作


    1,文件操作

    参数:1,文件路径  2,编码方式,3,执行动作(打开方式),只读,只写,,读写,追加和读写。

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

    f = open('yuyu',encoding='gbk',mode='r')
    #可以设f变量,f_obj,file,f_handler.....等文件句柄。
    s = f.read()
    print(s)
    f.close()

    open是windows的系统功能,windows的默认编码方式是gbk,linux操作系统默认为utf-8。

    流程:打开一个文件,产生一个句柄,对文件句柄进行操作,然后关闭。

    读:r只读

    1,文件以什么编码存储的就以什么编码方式打开。

    2,文件路径:绝对路径,从根目录开始一级一级查找直到找到。

                             相对路径,在同一文件夹下直接写文件。

    五种方式:

    1,f.read,全部读出来。只读模式,可以不注明。默认就是只读模式。

    f=open('yu.bak',encoding='utf-8')

    2,f.readline,一行一行的读取。

    3,f.readlines将原文件的每一行作为一个列表的元素读取。

    4,f.read(n)在r模式下按照字符读取。n=(字符数)

                          在rb模式下read(n)按照字节读取。rb模式只读以bytes类型,非文字类的文件时用rb

    5,循环读取。这种方式最好,占内存少。

    f = open('yu','r',encoding='utf-8')
    for i in f:
        print(i.strip())
    f.close()

    写:w,write写模式

    f = open('bk',encoding='utf-8',mode='w')
    f.write('常常激励自己')
    f.close()

    w 写模式,没有文件时创建一个文件写入内容,有文件,将原文件内容清空,再写入内容。

    #1. 打开文件的模式有(默认为文本模式):
    r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    w,只写模式【不可读;不存在则创建;存在则清空内容】
    a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】
    
    #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
    rb 
    f=open('yu.bak',mode='rb')
    s= f.read(6)
    print(s)
    f.close()#b'alexxe6x98'
    wb
    f = open('yu',mode='wb')
    f.write('李海娜'.encode('utf-8'))
    f.close()
    ab
    注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
    
    #3,‘+’模式(就是增加了一个功能)
    r+, 读写【可读,可写】
    w+,写读【可写,可读】
    a+, 写读【可写,可读】
    
    #4,以bytes类型操作的读写,写读,写读模式
    r+b, 读写【可读,可写】
    w+b,写读【可写,可读】
    a+b, 写读【可写,可读】
    

      

    1. 文件打开方式为文本模式时,代表读取3个字符

      2. 文件打开方式为b模式时,代表读取3个字节

    其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate

    注意:

      1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。

    f = open('yu','r+',encoding='utf-8')
    s = f.truncate(4)
    print(s)
    f.close()

    2,文件的修改

    # ① 创建一个新的文件
    # ② 读取一个原文件
    # ③ 将原文件的内容通过你想要的方式进行更改并写入新文件
    # ④ 将原文件删除
    # ⑤ 将新文件重命名

    with 语句:

    1,功能一自动关闭文件句柄。2,一次性操作多个文件 。

    # import os
    # with open('yu',encoding='utf-8')as f1,
    #     open('yu.bak',encoding='utf',mode='w')as f2:
    #     content = f1.read()
    #     new_content = content.replace('SB','alex')
    #     f2.write(new_content)
    # os.remove('yu')
    #os.rename('yu.bak','yu')

    1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数。

    apple 10 3

    tesla 100000 1

    mac 3000 2

    lenovo 30000 3

    chicken 10 3

    通过代码,将其构建成这种数据类型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 并计算出总价钱。

    li = []
    name_list = ['name','price','amount','year']
    with open('a.txt',encoding='utf')as f1:
        for i in f1:
            l2 = i.strip().split()
            dic = {}
            for j in range(len(l2)):
                dic[name_list[j]] = l2[j]
            li.append(dic)
    print(li)
    sum = 0
    for i in li:
        sum1 = int(i['price'])*int(i['amount'])
        sum += sum1
    print(sum)

    2,有如下文件:

    -------

    alex是老男孩python发起人,创建人。

    alex其实是人妖。

    谁说alex是sb?

    你们真逗,alex再牛逼,也掩饰不住资深屌丝的气质。

    ----------

    将文件中所有的alex都替换成大写的SB。

    import os 
    with open('a1.txt',encoding='utf-8')as f1,
        open('a.txt',encoding='utf-8',mode='w')as f2:
        for i in f1:
            new_i = i.replace('alex','SB')
            f2.write(new_i)
    os.remove('a1.txt')
    os.rename('a1.txt','a.txt')
  • 相关阅读:
    功能测试
    数据库
    loadrunner
    笔记
    基础知识
    类方法, 实例方法, 静态方法
    统计英文单词次数
    合并文件内容
    字典排序
    排序算法
  • 原文地址:https://www.cnblogs.com/yzxing/p/8657999.html
Copyright © 2020-2023  润新知