首页 > 编程学习 > 【Python】文本文件处理

【Python】文本文件处理

发布时间:2022/11/7 12:31:52

文章目录

  • 1 建立文件
  • 2 基本的读写文件
  • 3 复杂的读写文件
  • 4 文件异常处理
  • 5 文件与路径
    • 5.1 与路径相关的操作
    • 5.2 动态指定路径下建立新文件

1 建立文件

  • 新建文本文件的代码实现
    file_path = 'e:\\test.txt'           #定义需要建立的文本名称和路径
    new_file = open(file_path,'w')       #用open函数建立一个新的文本文件
    new_file.close()                     #用close()方法关闭新建的文件
    print("%s 成功建立!"%(file_path))    #提示新建文本成功
    
    执行结果如下:
    在这里插入图片描述
  • 代码编写分析
    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))     #提示往文件里写入的字节数
    

    执行结果如下:
    在这里插入图片描述
    注意:第二次执行该代码时,文本内容不变,说明以’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()                         #关闭打开的文件
    

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

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('连续写入完成')				   #提示写入结束 
    

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

    在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)
    

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

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

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

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

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

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

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

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

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

    执行结果如下:
    在这里插入图片描述
    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个字节
    

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

  6. 在指定位置写内容

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

    执行结果如下:
    在这里插入图片描述
    注意:文件中其他内容都丢失,只能在第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('关闭程序')                     #退出程序提示

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

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))
    
    执行结果如下:
    在这里插入图片描述
  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文件是否存在
    
    执行结果如下:
    在这里插入图片描述
  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:\\路径是否存在
    
    执行结果如下:
    在这里插入图片描述
  4. 建立文件夹(子路径)
    os.makedirs(p):p为字符串形式的需要建立的路径;建立不成功,抛出OSError出错信息,建立成功,则在对应的路径下建立新的文件夹。
    import os                       #导入os模块
    os.makedirs(r'e:\folder')       #在E盘建立folder文件夹
    
    如果文件夹已存在,则会报如下错误:
    在这里插入图片描述

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('关闭程序!')

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

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式