• 文件管理


    一、文件的操作的初识

    利用python代码写一个很low的软件,去操作文件。

    文件路径:path

    打开方式:读,写,追加,读写,写读......

    编码方式:utf-8,gbk ,gb2312......

    f1 = open('d:联系方式.txt', encoding='utf-8', mode='r')
    content = f1.read()
    print(content)
    # 输出:
    练习方式:123456

    open:内置函数,open底层调用的是操作系统的借口。

    f1是变量,也叫文件句柄。对文件进行的任何操作,都得通过文件句柄。

     

    encoding:可以不写,不写参数,默认的编码本:操作系统默认的编码

    Windows:gbk

    Linux:utf-8

    mac:utf-8

     

    f1.close():关闭文件句柄,不然会一直占用内存。

    文件操作三部曲

    打开文件

    对文件句柄进行相应的操作

    关闭文件

    报错原因:

    UnicodeDecodeError:文件储存时与文件打开时编码运用不一致。

    第二个错误:路径分隔符产生的问题:加个 r

    r'C:UsersYSDesktop联系方式.txt'

    二、文件操作的读

    (1)r 模式:读取得数据类型是 str ,操作的是文本文件

    read(n) :读几个字符 ,n不写默认全读

    f = open('文件的读.txt',encoding='utf-8')
    content = f.read(5)
    print(content)
    f.close()
    # 输出
    读读读读

    readline():读几行,写几遍,读几行

    f = open('文件的读.txt',encoding='utf-8')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()
    # 输出
    读读读读
    aaaa
    ABCD

    readlines():返回一个列表,列表中的每个元素是源文件的每一行。

    f = open('文件的读.txt',encoding='utf-8')
    content = f.readlines()
    print(content)
    f.close()
    # 输出
    ['读读读读
    ', 'aaaa
    ', 'ABCD
    ', '!@#¥']

    for 读取,和 for 循环 readlines 一样的输出效果

    但是 for 读取始终占用一行的内存,对于大数据的读取 readlines 因为他会生成一个字典,会一下把内存给占满(几十个G的数据)

    f = open('文件的读.txt',encoding='utf-8')
    for lin in f:
       print(lin)
    f.close()
    # 输出
    读读读读
    aaaa
    ABCD
    @#¥模式
    (2)rb模式:

    操作的是非文本的文件,图片,视频,音频。rb 模式读取的数据类型为 bytes

    读取方式和 r 是样的read(),readline(),readlines(),for

    f = open('LOL.png',mode='rb')
    conten = f.read()   # 方式和 r 模式是一样的
    print(conten)
    f.close()
    # 输出的是bytes数据格式
    b'x89PNG
    x1a
    ........'

    三、文件操作的写

    (1)w 模式:

    有关写(w)的清空的问题:关闭文件句柄,再次以 w 模式打开此文件时才会清空

    write()

    # 没有文件,创建文件,写入内容,在当前目录下。
    f = open('文件的写', encoding='utf-8', mode='w') # ’文件的写‘为文件名
    conten = f.write('随便写一点。。。')
    f.close()
    ​
    # 如果文件存在,先清空原文件内容,在写入新内容
    f = open('文件的写', encoding='utf-8', mode='w')
    conten = f.write('多写一点。。。')
    f.close()
    (2)wb 模式,操作非文本文件
    f = open('LOL.jpg', mode='rb')
    content = f.read()   # 先获取一个bytes格式的数据
    f.close()
    
    # 没有文件,创建文件,写入内容 写入数据格式为bytes(非Unicode编码)在当前目录下
    f1 = open('LOL2.jpg', mode='wb')
    content1 = f1.write(content)
    f1.close()

    三、文件操作的追加

    (1)a 模式
    # 没有文件创建文件,追加内容,有文件就直接在原文件的最后面追加。
    f = open('文件的追加', encoding='utf-8', mode='a')
    content = f.write('追加一点。。。。')
    f.close()

    四、文件操作的其他模式

    (1)r+ 模式:文件的读和写,先读后写,读一个光标往后移一个,写在最后面光标所在的位置,(读并追加)
    # 读并追加 顺序不能错,不能创建
    f = open('文件的读写',encoding='utf-8',mode='r+')
    content = f.read()   # 先读
    print(content)
    f.write('随便写一点。。。')   # 后追加

    五、文件操作的其他功能

    总结:

    三个大方向:

    读,四种模式: r rb r+ r+b

    写,四种模式: w wb w+ w+b

    追加:四种模式:a ab a+ a+b

    相应的功能:对文件句柄的操作:read,raed(n),readline(),readlines(),write()

    tell():方法获取光标的位置,单位是字节。

    f = open('文件的读写', encoding='utf-8')
    print(f.tell())            # 获取读之前光标所在的位置为 0
    content = f.read()        # 读,读一个字符光标往后移一个字符
    print(f.tell())            # 获取读之后光标所在的位置为 30
    print(content)
    # 输出
    0
    30
    随便写一点点点点点点

    seek():调整光标的位置

    f = open('文件的读写',encoding='utf-8')
    f.seek(6)                # 把光标的位置调整到第6个字节
    print(f.tell())            # 获取光标的位置为为6
    content = f.read()        # 从光标调整的位置开始读:写一点点点点点点
    print(f.tell())            # 获取光标读之后的位置为30
    # 输出
    6
    30
    写一点点点点点点

    flush:强制刷新,相当于保存。

    f = open('文件的读写', encoding='utf-8', mode='w')
    content = f.write('追加一点。。。。')
    f.flush()            # 保存一下,Python会自动保存,有些不会
    f.close()            # 退出

    六、打开文件的另一种方式

    with open():

    优点1:不用手动关闭文件句柄,会在一定时间关闭

    优点2:可以一个语句操作多个文件句柄,一个with可以操作多个open

    with open('文件的读', encoding='utf-8') as f1,   
         open('文件的追加', encoding='utf-8', mode='a') as f2:
        print(f1.read())
        print(f2.write('追加一点。。'))

    代表这一行代码没有完从下一行开始

    七、文件操作的改

    现存所有的软件对文件修改都是经历这五步(底层)

    1、以读的模式打开原文件

    2、以写的模式创建一个新文件。

    3、将原文件的内容读出来修改成新内容,写入新文件。

    4、将原文件删除。内存级别

    5、将新文件重命名成原文件

    low版的,因为用的是 read() 只针对小的文件,大的文件 read() 读的时候就会把内存占满(一次全读)

    import os
    with open('文件的改', encoding='utf-8') as f1,   # 读取要读取的文件
         open('文件的改.txt', encoding='utf-8', mode='w') as f2:  # 新建一个新文件
        low = f1.read()                                            # 读取
        content_low = low.replace('Python', 'PHP')                # 修改读取的文件内容
        content_new = f2.write(content_low)                        # 修改后写入新文件
    os.remove('文件的改')                                         # 删除原文件
    os.rename('文件的改.txt', '文件的改')                         # 把新文件改成原文件的名字

    进阶版。for 每次循环读取每一行的值,只占用当前一行的内存,占用资源少。

    import os
    with open('文件的改', encoding='utf-8') as f1,    # 读取要改的文件
            open('文件的改.txt', encoding='utf-8', mode='w') as f2:  # 新建一个文件
        for low in f1:                                    # for 循环读取要改文件的每一行
            content_new = low.replace('Python', 'PHP')    # 每循环一行修改一行
            f2.write(content_new)                        # 修改后的每一写入新文件
    os.remove('文件的改')                                 # 删除原文件
    os.rename('文件的改.txt', '文件的改')                  # 把新文件改成原文件的名字
    学习之旅
  • 相关阅读:
    windows 7系统搭建PHP网站环境
    本机搭建PHP环境全教程(图文)
    cmd不是内部命令解决方法
    [Tex学习笔记]章节用罗马字母编号
    丁伟岳院士逝世 享年70岁
    2014年度江西省青年科学家培养对象名单(共36名)
    Alexander Grothendieck去世了
    [詹兴致矩阵论习题参考解答]序言
    2014-2015第一学期听课安排
    一个老和尚的真言
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/14643122.html
Copyright © 2020-2023  润新知