Python入门(二十三):读写txt文件

点击跳转
《Python入门系列目录》



1. 文件概述

  • 文件是指记录在存储介质上的一组相关信息的集合
  • 文件类型
    • 文件扩展名

image

2. txt文件

  • 以读文件的方式打开一个文件对象,可以使用内置函数open函数传入文件名称与标识符
  • 标识符可指定文件打开模式为
    • 读取模式®
    • 写入模式(w)
    • 附加模式(a)
    • 读写模式(r+)

2.1 打开文件

f = open('e_1.txt', 'r')    # 如果不存在或找不到该文件,会出现FileNotFoundError错误
f = open('digit_1.txt', 'r')
txt = f.read()  # 一次性读取所有内容,存到内存中
print(txt)
f.close()       # 文件使用完毕必须关闭,会占用操作系统资源
  • 在文件读取过程中,一旦程序抛出IOError错误,后面的close函数将不会被调用

  • 在程序运行过程中,无论是否出错,都要确保正常关闭文件

    • try…finally…结构

      try:
          f = open('digit_1.txt', 'r')
          print(f.read())
      finally:
          if f:
              f.close()   # 最终都会调用这个关闭
      
    • with语句读取文件

      with open('digit_1.txt', 'r') as f:
          print(f.read())     # 结束后自动调用close()
      

2.2 设置工作路径

  • 需要打开不在程序文件所属目录下的文件,程序里就需要提供文件所在路径

  • 相对文件路径

    • 同目录下的文件夹,Linux和mac是用/,Windows是用\或者r

      with open('text_file/e_2.txt', 'r') as f:
          print(f.read())
      
  • 绝对文件路径

    with open('/Users/csjjli/Desktop/text_f/e_3.txt', 'r') as f:
        print(f.read())
    

2.3 创建含有文件数据的列表

  • 读取文件时,检查每一行,查找特定信息,修改文件中文本,可以对文件对象用for循环

  • 如果需要消除换行符,使用rstrip函数删除string字符串末尾的指定字符(默认为空格或换行符)

    • rstrip函数:删除字符串末尾的指定字符
    • lstrip函数:删除字符前面的指定字符
    • strip函数:删除字符串首尾两端的指定字符
    file_name = 'digit_1.txt'
    with open(file_name,'r') as f:
        for line_t in f:
            print(line_t)   # 会有空行,因为文件中的末尾有看不见的\n
    
  • read函数可以读取整个文件的内容,读取的内容将存储到一个字符串的变量中

    file_name = 'digit_1.txt'
    with open(file_name, 'r') as f:
        txts = f.read()
    print(type(txts))  # str
    
  • readlines函数可以按行读取整个文件的内容,然后将读取的内容存储到一个列表里面

    file_name = 'digit_1.txt'
    with open(file_name, 'r') as f:
        txts = f.readlines()
    print(type(txts))   # list
    print(txts)         # 列表中的每个元素是字符串,换行符也在字符串里面
    
    • 正常打印

      file_name = 'digit_1.txt'
      with open(file_name, 'r') as f:
          txts = f.readlines()
      for txt in txts:
          print(txt.strip())  # 移除了换行符
      
  • readline函数可以实现每次读取文件的一行,将读取到的一行存储到一个字符串变量中,返回字符串类型

    file_name = 'digit_1.txt'
    with open(file_name, 'r') as f:
        txt = f.readline()  # 只读取了一行
    print(type(txt))
    print(txt)
    

2.4 写入.txt文件

  • 如果要写入的文件不存在,open函数将自动创建文件

  • 如果文件已经存在,以写入模式写入文件时就会先清空该文件

    file_name = 'words.txt'
    f = open(file_name,'w')
    f.write('Hello, world!')
    f.close()   # 关闭后才算真正写入
    
  • 如果需要将数值型数据写入文本文件,必须先用str函数将数值型数据转换为字符串格式

    file_name = 'data.txt'
    f = open(file_name, 'w')
    data = list(range(1, 11))
    f.write(str(data))
    f.close()  # [1, 2, ...]
    
  • 需要注意的是,当写入多行数据的时候,write函数不会自动添加换行符号,此时会出现几行数据挤在一起的情况

    • 将行与行数据进行区分,需要在write语句内添加换行符号(\n)

      file_name = 'words.txt'
      f = open(file_name,'w')
      f.write("Hello, world!\n")
      f.write("I love Python!\n")
      f.close()
      
  • 只有调用close函数,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close函数的后果可能是数据只写了一部分到磁盘,剩下的丢失了

    • 所以用with语句更为保险
  • 使用with语句写入.txt文件

    • 要写入特定编码的文本文件,需要给open函数传入encoding参数,将字符串自动转换成指定编码

    • open函数默认encoding参数为UTF-8,其他编码需要传入encoding参数

      file_name = 'words.txt'
      f = open(file_name, 'w', encoding='gbk')
      f.write('hello world')
      
  • 对文件添加内容

    • 给文件添加内容但不覆盖文件原内容,则需以附加模式(a)打开文件。此时写入的内容会附加到文件末尾,而不会覆盖原内容
  • writelines函数可以把列表中的字符串写入文件

    • 注意是连续写入文件,没有换行
  • print函数不仅能够将信息输出到屏幕上,还可以通过传参的方式让print函数将信息输出到文件中

  • print的完整格式

    • print(objects, sep, end, file, flush)

    • objects就是我们平时所需要输出的那些内容,后面4个为关键字参数

    • sep关键字参数:在输出的字符串之间插入指定字符串,默认是空格

      print("a", "b", "c")            # a b c
      print("a", "b", "c", sep="**")  # a**b**c
      
    • end关键字参数:在print输出语句的结尾加上指定字符串,默认是换行(\n),而如果不想换行,则end=’’

      • 注意:若不换行,则print语句不会马上打印出当前需要打印的信息,直到需要换行打印的时候才会将这一行信息全部打印出来
    • file参数:用于将文本输入到某些对象中,可以是文件,也可以是数据流等等,默认是输出到屏幕,即sys.stdout

      f = open("words.txt", 'r + ')   # 写到前面并且等长度替换原有内容
      print("a", file=f)              # 将a输出到文件中
      f.close()
      
    • flush参数:值只能为True或False,默认为False,表示是否立刻将输出语句输入到参数file指向的对象中

      • False表示在执行f.close()之前,内容不会马上写入到文件中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值