• Python之文件操作



    格式化

    • 字符串格式化:将字符串按照一定规格和式样进行规范

      "{}{}{}".format()

    • 数据格式化:将一组数据按照一定规格和式样进行规范:表示、存储、运算等


    1. 文件的使用

    1.1 何为文件?

    • 文件是数据的抽象和集合

    • 文件是存储在辅助存储器上的数据序列

    • 文件是数据存储的一种形式

    • 文件的展现形态:文本文件和二进制文件

      • 文本文件和二进制文件只是文件的展示方式
      • 本质上,所有文件都是二进制形式存储
      • 形式上,所有文件采用两种方式展示
    • 文本文件

      • 由单一特定编码组成的文件,如 UTF-8 编码
      • 由于存在编码,也被看成是存储着的长字符串
      • 适用于例如: .txt 文件、.py 文件
    • 二进制文件

      • 直接由比特0和1组成,没有同意字符编码
      • 一般存在二进制0和1的组织结构,即文件格式
      • 使用于例如: .png 文件、.avi 文件等

    例如:“中国是个伟大的国家!”

    • 文本形式: 中国是个伟大的国家
    • 二进制形式: b' xd6xdoxb9xfalxcaxc7xb8xf6xcexb0xb4xf3 xb5xc4xb9xfalxbcxd2xa3xa1'

    1.2 文件的打开和关闭

    Python语言文件处理的步骤:打开-操作-关闭

    对一个文件,如果不对它进行处理的时候,它体现的是一种文件的存储状态,文件在计算机的硬盘中存储。

    如果一个程序想处理一个文件,首先要使这个文件变成占用状态。在占用转态中,一个程序可以唯一地、排他地对文件进行相关处理。

    image-20210226101520238

    在打开文件后,可以对文件进行数据读入和数据输出,简称为“读文件”和“写文件”。

    下面试Python提供的3个常用的读文件函数和3个写文件函数:

    # 3个常用的读文件函数
    a.read(size)
    a.readline(size)
    a.readlines(hint)
    
    # 3个常用的写文件函数
    a.write(s)
    a.awritelines(lines)
    a.seek(offset)
    

    文件的打开

    <变量名> = open(<文件名>,<打开模式>)
    变量名:文件句柄
    文件名:文件路径和名称,源文件同目录可省路径
    打开模式:文本模式 or 二进制模式
    

    文件路径问题:
    windows中文件路径如 D:pythonf.txt 用的是反斜杠 "",我们在输入文件的路径的使用要将它换成 "/",即 D:/python/f.txt;或者增加一个反斜杠进行转义,即D:pythonf.txt。

    无论使用绝对路径还是相对路径,我们最终的目的是要让Python找到这个文件。


    文件的打开模式

    描述 文件打开模式
    'r' 只读模式,默认值,如果文件不存在,返回 FileNotFoundError
    'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖
    'x' 创建写模式,文件不存在则创建,存在则返回 FileExistsError
    'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容
    'b' 二进制文件模式
    't' 文本文件模式,默认值
    '+' 与 r/w/x/a 一同使用,在原功能基础上增加同时读写功能

    现在用一个名为 f.txt 的文件保存:“中国是个伟大的国家!”,然后用文本形式打开这个文件。

    tf = open("f.txt","rt",encoding="UTF-8")
    print(tf.readline())
    tf.close()
    

    文件关闭

    <变量名>.close()
    

    如果写的程序中没有关闭文件的操作,在程序执行过程中,文件始终处于打开状态。当程序退出,文件会自动关闭。


    1.3 文件内容的读取

    Python语言文件读取的3个常用方法:

    操作方法 描述
    f.read(size=-1) 读入全部内容,如果给出参数,读入前size长度。
    f.readline(size=-1) 读入一行内容,如果给出参数,读入该行前size长度
    f.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前 hint 行

    例如:

    >>> s = f.read(2)
    中国
    >>> s = f.readline()
    中国是一个伟大的国家!
    >>> s = f.readlines()
    ['中国是一个伟大的国家!']
    

    1.4 文件的全文本操作

    全文本处理:

    遍历全文本:方法一
    fname = input("请输入要打开的文件的路径:")
    fo = open(fname,"r")
    txt = fo.read()
    fo.close()
    
    优点:一次性读入,统一处理
    缺点:如果文件特别大,一次性将文件读入内存将会耗费非常大的时间和资源
    ----------------------------------------------------------------------------
    
    遍历全文本:方法二
    fname = input("请输入要打开的文件的路径:")
    fo = open(fname,"r",encoding="UTF-8")
    # fo.read(2)参数2表示从文件中读入两个字节
    txt = fo.read(2)
    while txt != "":
        # 对txt进行处理
        txt = fo.read(2)
    fo.close()
    
    优点:分阶段按数量读入,逐步处理。对于处理大文件更加可行和有效
    

    逐行处理:
    文本文件一般都是分行存储,每一行结尾都会有一个回车到下一行。
    对于分行存储的文件,采用逐行遍历的方法更常见:

    逐行遍历文件:方法一
    fname = input("请输入要打开的文件的路径:")
    fo = open(fname,"r",encoding="UTF-8")
    for line in fo.readlines():
        print(line)
    fo.close()
    
    优点:分行读入,逐行处理
    

    1.5 数据的文件写入

    操作方法 描述
    f.write(s) 向文件写入一个字符串或者字节流
    f.writelines(lines) 将一个元素为字符串的列表写入文件
    f.seek(offset) 改变当前文件操作指针的位置,offset含义如下: 0-文件开头;1-当前位置;2-文件结尾

    例如:

    >>> f.write("中国是一个伟大的国家")
    >>> ls = ["中国","法国","美国"]
    >>> f.writelines(ls)
    中国法国美国
    >>> f.seek(0)	#回到文件开头
    
    f.seek()函数的应用:
    
    fo = open("output.txt","w+",encoding="UTF-8")
    ls= ["中国","法国","美国"]
    fo.writelines(ls)
    for line in fo:
        print(line)
    fo.close()
    

    当我们运行上述代码,预期可能会输出“中国法国美国”,但是我们没有看到任何输出信息。现在在上面代码中增加一行:

    fo = open("output.txt","w+",encoding="UTF-8")
    ls= ["中国","法国","美国"]
    fo.writelines(ls)
    fo.seek(0)
    for line in fo:
        print(line)
    fo.close()
    

    当我们将信息写入到文件的时候,当前处理文件的指针在文件的最后面。也就是写过信息后,指针指向了文件的最后面,指向下一次可能写入信息的位置。

    此时我们再调用 for in 的方式去遍历一行并且打印输出的时候,它指的是从当前位置指向文件的结尾处,取出其中的每一行并且打印出来。在这个时候我们已经写入的信息在指针的上方而不在指针的下方,因此我们之前的6行代码,并不能输出我们已经写过的信息。为了将我们写过的信息输出,需要调整当前写入后的指针回到文件的初始位置。从初始位置开始再进行逐行遍历,这样就能够把文件的全部信息打印输出。

    所以加入 fo.seek(0) 表示写入文件之后将指针返回到文件的最开始,从最开始的位置进行文件全文的遍历打印。程序执行完就可以看到“中国法国美国”了

    以上内容资料均来源于中国大学MOOC网-北京理工大学Python语言程序设计课程
    课程地址:https://www.icourse163.org/course/BIT-268001

  • 相关阅读:
    《安富莱嵌入式周报》第241期:2021.11.222021.11.28
    开源功率计,带电源功能,专用于物联网功耗测量
    实用技能分享,充分利用内联函数,内联汇编,内部函数和嵌入式汇编提升代码执行效率和便捷性(20211217)
    【STM32F407】第7章 RTX5任务管理
    【STM32H7】第8章 RTX5任务优先级分配和修改
    H7TOOL的LUA小程序教程第3期:使用LUA控制H7TOOL的LCD简易界面设计
    【小知识】使用串口8bit,7bit和6bit数据格式的奇偶校验问题
    【第3版emWin教程】第53章 emWin6.x的按钮Button控件
    【第3版emWin教程】第51章 emWin6.x的Window窗口控件
    各种GUIBuilder体验TouchGFX,AppWizard,GUIX Studio,Embedded Wizard,AWTK,柿饼UI,LVGL,Qt fot MCU等(20211221)
  • 原文地址:https://www.cnblogs.com/keepcode/p/14445988.html
Copyright © 2020-2023  润新知