• 【Python】文本文件处理


    1 建立文件

    • 新建文本文件的代码实现
      file_path = 'e:\\test.txt'           #定义需要建立的文本名称和路径
      new_file = open(file_path,'w')       #用open函数建立一个新的文本文件
      new_file.close()                     #用close()方法关闭新建的文件
      print("%s 成功建立!"%(file_path))    #提示新建文本成功
      
      • 1
      • 2
      • 3
      • 4
      执行结果如下:
      在这里插入图片描述
    • 代码编写分析
      1. 文本名称和路径需要考虑转义符号的影响。如上方代码中的’e:\test.txt’ 字符串中的“\t”本是是一个横向制表符,如果直接使用将出错。取消转义的另一方法是在字符串前加原始字符串限制符号(r或R),如:file_path = r'e:\test.txt'

      2. open函数 建立(打开)文件
        open函数属于系统内置函数,支持对字符串或二进制文件的打开操作,返回可操作的文件对象。常用格式:open(fileName, mode='w'),mode参数的详细用法如下:

        mode参数值功能描述
        ‘r’以只读方式打开已经存在的文件
        ‘w’以可写方式打开文件;若指定的文件不存在,则建立新文件
        ‘x’以可写方式建立一个新文件
        ‘a’以追加写入方式打开一个文件;若指定的文件不存在,则建立新文件,再追加写入
        ‘b’二进制模式
        ‘t’文本模式
        ‘+’以读写方式打开一个文件
        ‘U’通用换行符模式(不建议使用

        其中,r(只读)、w(只写)、x(新建)、a(追加)为打开文件的基本模式;b、t、+、U与基本模式组合使用,对应二进制、文本、读写、通用换行符;mode默认值为’rt’(读操作)。

      3. close() 方法关闭文件
        如果不关闭,则打开的文件对象一直存在内存中(直至操作系统退出或者被相关程序清理),容易出现内存溢出等错误。

    2 基本的读写文件

    1. f.write(s)方法写内容
      含义:代表以可写方式打开的文件对象;s为将要写入文件的内容;返回写入的字节数。

      file_path = r'e:\test.txt'               #指定需要建立或打开的文本名称和路径
      new_file = open(file_path,'w')           #用open函数建立一个新的文本文件
      t_n = new_file.write('I like Python!')   #用文件对象write()方法写字符串
      new_file.close()                         #用close()方法关闭新建的文件
      print("往文件里写入%d字节内容"%(t_n))     #提示往文件里写入的字节数
      
      • 1
      • 2
      • 3
      • 4
      • 5

      执行结果如下:
      在这里插入图片描述
      注意:第二次执行该代码时,文本内容不变,说明以’w’模式打开文本文件,往里面写内容时,是从文件开始写的,第二次写的内容会覆盖第一次的。若要解决该问题,可以采用’a’模式打开文件。

    2. f.read(size)方法读取内容
      含义:f代表以可读方式打开的文件对象;size为可选参数,指定读取字节数量的内容,不填默认读取全部内容。

      file_path = r'e:\test.txt'               #指定需要建立或打开的文本名称和路径
      new_file = open(file_path,'r')           #以只读模式打开test.text文件
      c = new_file.read()                      #用文件对象read()方法读取内容
      print(c)                                 #打印读取内容
      new_file.close()                         #关闭打开的文件
      
      • 1
      • 2
      • 3
      • 4
      • 5

      执行结果如下:
      在这里插入图片描述

    3 复杂的读写文件

    1. 一次写入多行

      t = ['one', 'two', 'three', 'four', 'five', 'six']
      f = open(r'e:\test2.txt', 'a')         #追加写入模式打开文件
      for i in t:                            #循环,迭代获取列表元素
          f.write(i+'\n')                    #把每个元素循环写入文件中,末尾换行加\n
      f.close()							   #关闭文件
      print('连续写入完成')				   #提示写入结束 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      执行结果如下:
      在这里插入图片描述

      在E盘根目录下打开test2.txt文件,内容如下:
      在这里插入图片描述

    2. 一次读一行
      f.readline(s),f代表以可读模式打开的文件;s为可选参数,代表读取指定大小的字节,若没有设置,则以行为单位返回字符串。

      f = open(r'e:\test2.txt','r')
      r = 1
      while r:
          r=f.readline()			#一次读取一行
          print(r)
      
      • 1
      • 2
      • 3
      • 4
      • 5

      执行结果如下:
      在这里插入图片描述

    3. 以列表格式读取多行
      f.readlines(),f代表以可读模式打开的文件;

      f = open(r'e:\test2.txt','r')
      L_r = f.readlines()			#以列表格式读取多行
      print(L_r)
      
      • 1
      • 2
      • 3

      执行结果如下:
      在这里插入图片描述

    4. 连续读特定字节数量的内容

      f = open(r'e:\test2.txt','r')	#以只读方式打开test2.txt文件
      print(f.readline(2))			#第一次,读取文件头2个字节
      print(f.readline())				#继续读取同一行,剩余字节
      print(f.read(4))				#继续读取4个字节
      
      • 1
      • 2
      • 3
      • 4

      执行结果如下:
      在这里插入图片描述
      注意:在连续读取同一个文件的情况下,后一个读取动作(readline()或read())都在前一个读完的字节位置后继续读取,而不是从文件头读。

    5. 在指定位置读内容
      f.tell():f代表已打开的文件,tell()方法返回当前文件可以读写的位置(字节数)

      f = open(r'e:\test2.txt', 'r')
      print(f.readline(3))	#读取3个字节
      print(f.tell())			#获取当前位置
      
      • 1
      • 2
      • 3

      执行结果如下:
      在这里插入图片描述
      f.seek(offset[,whence]):f代表已打开的文件,seek()方法重新指定将要读写的当前位置。offset参数设置位置的偏移量的字节数。whence参数可选,确定文件起计位置,默认值为0,代表从文件的开始位置+偏移量来确认当前位置。

      f = open(r'e:\test2.txt', 'r')
      print(f.seek(5))		#指定当前位置为5
      print(f.read(3))		#从5开始读取3个字节
      
      • 1
      • 2
      • 3

      执行结果如下:
      在这里插入图片描述

    6. 在指定位置写内容

      f = open(r'e:\test2.txt', 'w')
      f.seek(5)
      f.write('------')		#试图往文件内容中间位置插入新的内容
      f.close()
      
      • 1
      • 2
      • 3
      • 4

      执行结果如下:
      在这里插入图片描述
      注意:文件中其他内容都丢失,只能在第17个字节处发现新写入的内容。除了可以采用尾部追加内容外,要在文件内容中间进行增加或修改,可以先通过列表读取所有内容,然后再修改列表内容,最后再写入文件。

    4 文件异常处理

    fpath = r'e:\test3.txt'                      #E盘下没有test3.txt文件
    flag = False
    try:                                         #异常捕捉开始
        f = open(fpath, 'r')                     #试图打开不存在的test3.txt文件
        print(f.read())
        flag = True
    except:                                      #捕捉异常
        print('打开%s文件报错,请检查!'%(fpath))    #出错提示
    finally:                                     #无论出错与否,都强制执行以下代码
        if flag:                                 #如果文件正常打开
            f.close()                            #关闭文件
            print('关闭文件')
        else:                                    #文件打开异常
            print('关闭程序')                     #退出程序提示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    执行结果如下:
    在这里插入图片描述

    5 文件与路径

    5.1 与路径相关的操作

    在Python自带的os模块里,通过path对象的各种方法可以实现对路径的各种操作。

    1. 获取程序运行的当前路径
      os.path.abspath(p):abspath()以字符串形式为返回平台归一化(考虑了跨操作系统)的绝对路径;p为指定的路径名称(字符型)。若p指定为’.‘,则代表当前路径(等价于os.path.curdir)。
      import os								#导入os模块
      print(os.path.abspath('.'))				#返回当前绝对路径
      print(os.path.abspath(os.path.curdir))
      
      • 1
      • 2
      • 3
      执行结果如下:
      在这里插入图片描述
    2. 判断指定路径下是否存在文件
      os.path.exists(p):p为指定的路径名称(字符型);若存在,返回True,不存在返回False。也可以通过os.path.isfile(p)直接判断。
      import os                                  #导入os模块
      print(os.path.exists(r'e:\test2.txt'))     #用exists()方法判断test2.txt文件是否存在
      print(os.path.isfile(r'e:\test3.txt'))     #用isfile()方法判断test3.txt文件是否存在
      
      • 1
      • 2
      • 3
      执行结果如下:
      在这里插入图片描述
    3. 判断指定路径是否存在
      os.path.isdir(p):p为字符串格式的路径;存在返回True,不存在返回False。也可以用os.path.exists(p)直接判断路径。
      import os                                 #导入os模块
      print(os.path.isdir(r'e:\\'))             #isdir()方法判断e:\\路径是否存在
      print(os.path.exists(r'f:\\'))            #用exists()方法判断f:\\路径是否存在
      
      • 1
      • 2
      • 3
      执行结果如下:
      在这里插入图片描述
    4. 建立文件夹(子路径)
      os.makedirs(p):p为字符串形式的需要建立的路径;建立不成功,抛出OSError出错信息,建立成功,则在对应的路径下建立新的文件夹。
      import os                       #导入os模块
      os.makedirs(r'e:\folder')       #在E盘建立folder文件夹
      
      • 1
      • 2
      如果文件夹已存在,则会报如下错误:
      在这里插入图片描述

    5.2 动态指定路径下建立新文件

    import os                                           #导入os模块
    import sys                                          #导入sys模块
    get_cur_path = os.path.abspath(os.path.curdir)      #获取程序当前路径
    f_n = get_cur_path + '\\files'                      #在当前路径下建立子路径files
    try:
        if not os.path.isdir(f_n):                      #确认路径不存在
            os.makedirs(f_n)                            #建立子路径
    except:
        print("建立子文件夹%s出错!"%(f_n))                 #提示建立出错
        sys.exit()                                      #退出程序
    
    #===================================================上面为动态建立文件夹
    f_n = f_n + '\\test3.txt'                           #准备在新建立的子路径下存放文件test3.txt
    flag = False
    try:
        f = open(f_n, 'w')                              #第一次执行,在新路径下新建新文件test3.txt并打开
        print(f.write('OK'))                            #写入OK,并返回2字节的数字
        flag = True
        print('文件%s写入正常!'%(f_n))
    except:
        print('打开%s文件出错,请检查!'%(f_n))
    finally:
        if flag:
            f.close()
            print('关闭文件!')
        else:
            print('关闭程序!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    执行结果如下:
    在这里插入图片描述

  • 相关阅读:
    本地部署Llama3-8B/70B 并进行逻辑推理测试
    【web-渗透测试方法】(15.8)测试逻辑缺陷、共享主机漏洞、Web服务器漏洞、信息泄露
    git clone - error: invalid path
    【CNN-GRU预测】基于卷积神经网络-门控循环单元的单维时间序列预测研究(Matlab代码实现)
    Immutable!任何变更都需要发布
    Dialog组件
    c++ 正则表达式
    【.Net】Linq的使用
    系统表空间-mysql详解(四)
    UTF-8字符串操作方法
  • 原文地址:https://blog.csdn.net/weixin_49026134/article/details/127584177