zoukankan      html  css  js  c++  java
  • Day 09 文件处理

    什么是文件

    文件就是操作系统提供的虚拟单位

    绝对路径与相对路径

    • 绝对路径是从盘符开始的路径
    • 相对路径是当前执行文件所在的文件夹开始找

    文件打开的三种模式

    如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

    open('E: yporaNoteClassDay09user_info.txt')

    打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。

    文件打开模式之r模式

    r:read,只读模式,只能读不能写,文件不存在时报错

    f = open('user_info.txt', mode = 'r', encoding='utf8')
    print(f.readable())
    print(f.writable)
    f.close()
    

    True
    False

    f = open('user_info.txt', mode = 'r', encoding='utf8')
    data = f.read()
    print(data)
    f.close()
    

    tiny 123

    f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。

    f = open('user_info.txt', mode = 'r', encoding='utf8')
    data1 = f.readline()  # 读取一行
    data1 = f.readlines()  # 一行一行的读取
    f.close()
    

    文件打开模式之w模式

    w:write,只能写,不能读,文件已存在会清空文件再写入数据;文件不存在的时候会创建文件后写入数据

    f = open('user_info.txt', mode = 'w', encoding='utf8')
    print(f.readable())
    f.write('tiny,你好帅啊')
    f.flush()  ## 快速保存
    f.close()
    

    False

    f = open('user_info.txt', mode = 'r', encoding='utf8')
    data = f.read()
    print(data)
    f.close()
    

    tiny,你好帅啊

    文件打开模式之a模式

    a:append,只能追加,不能读,在文件的末端追加写入内容;文件不存在的时候会创建文件追加写入内容

    f = open('user_info.txt', mode = 'a', encoding='utf8')
    print(f.readable())
    f.write('tiny,233')
    f.write(' tiny')
    f.close()
    

    False

    f = open('user_info.txt', mode = 'r', encoding='utf8')
    print(f.read())
    

    tiny,你好帅啊tiny,233 tiny

    文件打开的两种方式

    t方式,也就是文本的大开方式一般与三种打开模式连用,可以省略不写,事实上上面的'r','w','a'模式都是把t省略了

    还有一中方是b(bytes)方式,是以二进制的方式来打开文件,一般用来打开图片/音频/视频,b模式读取文件,一定不能加上encoding参数,因为二进制无法再编码

    with管理文件上下文

    上面我们用open()的方法来打开文件,但是每次处理文件需要用到close()才能手动释放文件对操作系统的占用,

    下面介绍一下更简单的方法,利用with open()管理文件上下文.

    with open('user_info.txt', 'rt', encoding='utf8') as f:
        print(f.read())
    

    tiny 123

    with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝.

    with open('user_info.txt', 'rb') as fr, 
            open('xxx.txt', 'wb') as fw:
        f.write(f.read())
    

    文件的高级应用

    可读、可写

    • r+t:可读、可写
    • w+t:可写、可读
    • a+t:可追加、可读

    文件内指针移动

    1. seek(offset,whence):offset代表指针的偏移量,偏移量的单位是字节,whence可以为0,1,2,0 表示从文件头开始,1 表示当前文件所在位置,3 相当于文件末尾
    2. tell():每次统计都是文件开头到当前指针所在位置
    3. read(n):只有read()的n表示字符字符个数,从文件头开始读取n个字符
    4. truncate():截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件

    文件的两种修改方式

    文件的数据是放在硬盘上的,因而只存在覆盖,不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式

    方式一

    with open('user_info.txt', 'r', encoding='utf8') as fr:
        data = fr.read()
        data = data.replace('tiny', 'Tiny')
        
    with open('user_info_change.txt', 'w', encoding='utf8') as fw:
        fw.write(data);
    
    import os
    
    # 删除原文件
    os.remove('user_info.txt')
    # 重命名
    os.rename('user_info_change.txt', 'user_info.txt')
    

    方式二

    with open('user_info.txt', 'r', encoding='utf8') as fr: 
        with open('user_info_change.txt', 'w', encoding='utf8') as fw:
            for i in fr:
                data = i.replace('tiny', 'Tiny')
                
            fw.write('data')
            
    # 删除原文件
    os.remove('user_info.txt')
    # 重命名
    os.rename('user_info_change.txt', 'user_info.txt')
    
  • 相关阅读:
    [LeetCode]Remove Duplicates from Sorted Array
    二叉树中和为某一值的路径
    机器学习基石笔记:Homework #2 Decision Stump相关习题
    机器学习基石笔记:08 Noise and Error
    机器学习基石笔记:07 The VC Dimension
    机器学习基石笔记:06 Theory of Generalization
    机器学习基石笔记:05 Training versus Testing
    正交矩阵、EVD、SVD
    win10安装ubuntu16.04及后续配置
    chmod命令相关
  • 原文地址:https://www.cnblogs.com/2222bai/p/11544462.html
Copyright © 2011-2022 走看看