• 第十一章 文件读写


    # 第十一章 文件读写
      在使用python编程时,经常会遇到读写文件的操作,比如配置文件,数据存储都是对文件操作。不管你将来是需要写爬虫、Web开发、小程序等等,都离不开文件,那么文件的操作就是要学习起来的了。
      
      文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问。当我们要读取或者写入文件时,我们需要打开文件;在操作完毕时,我们需要关闭文件,以便释放和文件操作相关的系统资源。
     
      很多童鞋困扰于读写文件的各种模式(如阅读、写入、追加等),以及搞不清open、read、readline、readlines、write等方法的使用。
     
      这篇文章就是要告诉你Python文件读写的所有秘密!
      
    ## 一、文件打开和关闭  
    ### 1、文件打开
      Python中打开文件命令 open(),open命令返回文件的一个对象。如果你想用python读取文件(如txt、csv等),第一步要用open函数打开文件。open()是python的内置函数,它会返回一个文件对象,这个文件对象拥有read、readline、write、close等方法。
    #### 1)、open函数  
      open函数有两个参数:
    参数file:需要打开的文件路径,参数mode(可选):打开文件的模式,如只读、追加、写入等。
        
    #### 2)、with 关键字
      
      在打开文件时,很多人通常直接用open('file'),这样并不酷。最好使用 with 关键字。优点是当子句体结束后文件会自动调用close()方法正确关闭,即使在某个时刻引发了异常。
      
      as含义:将前面进行操作的文本文件赋予f这个对象,能够简约代码,提高代码阅读能力。
     
    #### 3)、文件打开模式
     
     
     
     
    ### 2、文件关闭
    打开文件并处理完毕后,需要关闭文件,这里用到close方法。
    #### 1)、close()方法
      f.close() 用来关闭文件并立即释放它使用的所有系统资源。如果你没有显式地关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。
     
    应该要养成使用close()的习惯。
     
     
    ## 二、文件读取、写入
    ### 1、文件读取
    #### 1)、read()方法
      当使用open函数打开文件后,就可以使用该文件对象的各种方法了,read就是其中一种。read()会读取文件所有数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。
      
      首先,我们需要知道的一个小知识点,要读取UTF-8编码的文本文件,需要给open()函数传入encoding参数。遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略。
      
      open('test.txt', 'r', encoding='utf-8', errors='ignore')
    执行该代码,结果为:
     
    #### 2)、read(size)方法
      每次最多读取指定长度的内容,返回一个str,size指定的是字符长度。
      
    执行该代码,结果为:
     
    #### 3)、readline()方法
       每次读取一行内容,返回类型str。
       
    执行该代码,结果为:
     
    #### 4)、readlines()方法
      一次读取所有内容并按行返回list。
      
    执行该代码,结果为:
     
     
    ### 3、文件写入
      写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件。
    #### 1)、write()方法
      write()方法和read()、readline()方法对应,是将字符串写入到文件中。将字符串写入文件,如果写入结束,需要在字符串后面加上" "
     
     
    执行该代码,结果为为空,然后,再打开song.txt文件,显示的内容是:
     
     
    注意:'w'这个模式是酱紫:如果没有这个文件,就创建一个;如果有,那么就会先把原文件的内容清空再写入新的东西。所以若不想清空原来的内容而是直接在后面追加新的内容,就用'a'这个模式。
    #### 2)、writelines()方法
      writelines()方法和readlines()方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符。
      
      以a写入形式在文本末尾追加新的内容
     
      执行该代码,结果为:
     
    #### 3)、seek()和tell()方法
      seek():这是光标指定位置的方法,可传入参数seek((offset,from_what),from_what值为文件的开始位置,可以省略;offset为偏移量。f.seek(2,0)读取位置向后移动2个字符。
      
      tell():当前文件游标的位置。
     
    执行该代码,结果为:
     
     
    ## 三、文件目录操作
      我们在电脑中可以创建新的目录,也可以修改原有目录的名称,和删除目录,不过删除目录时需要谨慎,防止误删除重要的文件。这些目录的操作都是通过程序来完成的,这个程序就是电脑中的资源管理器。  
      
      用Python语言也可以编写一个资源管理器程序,Python提供了有关文件目录操作的一些方法,这些方法可以帮助我们编写电脑的资源管理器程序。下面我们将逐步介绍这些方法,首先会介绍如何在电脑中创建和删除目录,然后再介绍如何修改目录名称。后面的文章会介绍如何遍历目录和文件。当我们掌握了这些操作目录的方法后,就可以使用Python语言编写资源管理器程序了。
      
      Python操作目录的方法包含在OS模块中,在代码中需要导入OS模块。
      
    ### 1、创建目录
     
     
    执行以上代码,可以去D盘验证,会发现,D盘下有了text1和text2这两个文件夹。
    ### 2、创建多级目录
     
    执行改代码,可以去D盘验证:
     
    ### 3、删除目录
      当目录不再需要或用户删除目录时,我们可以使用rmdir方法来删除指定的目录,删除目录时需要慎重,因为该目录下的所有文件都会被删除。
      使用rmdir方法删除指定的目录,删除的目录路径为“D:/text3/text”,在执行rmdir方法删除text目录之前,需要确保text目录是存在的。
        
      执行改代码,text3目录下为空。
      
      删除多级目录,使用removedir方法。可课后练习一下。
    ### 4、修改目录名称
      当用户需要修改已有目录的名称时,可以使用rename方法来修改已有的目录名称,rename方法要求传入两个参数,第一个参数是需要修改目录名称的目录路径,第二个参数是修改后的目录路径。
     
    执行该代码,结果就可以在D盘text4里验证。  
    ### 5、os.path路径操作
    #### 1)、os.path()模块
      os.path 模块主要用于获取文件的属性。下面举例常用的一些方法:
      - os.path.basename(path)     返回文件名
      - os.path.abspath(path)      返回绝对路径
      - os.path.relpath(path)      返回相对路径
      - os.path.dirname(path)      返回文件路径
      - os.path.exists(path)       如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
      - os.path.isdir(path)        判断路径是否为目录
      - os.path.join(path1[, path2[, ...]])  把目录和文件名合成一个路径
      - os.path.split(path)        把路径分割
     
    #### 2)、os.path()案例
     
     
      执行以上代码,结果为:
     
    ## 四、课堂练习
    #### 1、写一个简单的复制文件代码:通过函数的形式,使用参数能够传递的方法,进行赋值。
    #### 2、写一个能够遍历某目录下所有内容的函数:①简单形式:文件夹里全部都是文件;②复杂形式:文件夹里有文件夹和文件。
     
     
    ## 五、上一节课堂练习答案
    #### 1、现有如图所示的两个类,定义一个Child类继承这两个类,并且重写__init__方法,在实例化Child时候,调用ParentA类的__init__方法。
     
    如下图所示:
     
    执行该代码,结果为:
     
    #### 2、
     
     
    如下图所示:
    执行该代码,结果为:
     
     
     
     
    如有问题请留言,谢谢!
  • 相关阅读:
    spring的@Transactional注解详细用法
    centos7安装Docker详细步骤(无坑版教程)
    FastDFS安装
    免费下载 Ksuite 2.80 for KESS V2 V5.017
    GODIAG GD201 VS Foxwell NT680 PRO
    GODIAG V600 BM 使用 BMW ICOM 软件进行 BMW FEM/BDC 模块诊断
    Launch X431 TSGUN TPMS诊断工具测试报告
    2021 Nissan Altima 为 Autel IM608 添加智能钥匙
    怎么解决2M2 Magic Tank自动更新后无法校准?
    SpringBoot之定时任务详解
  • 原文地址:https://www.cnblogs.com/yunsi/p/13203263.html
Copyright © 2020-2023  润新知