【头歌-Python】文件自学引导

2024-06-08 1826阅读

禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793

【头歌-Python】文件自学引导
(图片来源网络,侵删)

参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301

  • 如果代码存在问题,麻烦大家指正 ~ ~
  • 有帮助麻烦点个赞 ~ ~

    文件自学引导

    • 第1关:读文件全部内容到一个字符串
    • 第2关:读文件前n个字符
    • 第3关:逐行读取并输出文件内容
    • 第4关:读取文件到列表中
    • 第5关:读取文件中的数据到二维列表
    • 第6关:将唐诗写入到文件中

      第1关:读文件全部内容到一个字符串

      任务描述

      本关任务:编写一个能读文件全部内容到一个字符串的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 文件的打开
      2. 读文件到字符串

      文件的打开

      内置函数open(file, mode='r', encoding=None)可以打开 file 并返回对应的文件对象(file object)。

      file 是一个可以带路径的文件名,mode 用于指定打开文件的模式。默认值是 'r' ,表示以文本模式打开并读取文件。其他常见模式有:写入模式 'w' (已存在文件会被清空)、独占创建模式 'x' 、追加写入模式 'a' 。

      encoding用于在文本模式下指定编码格式,默认根据当前平台决定编码格式。

      当使用 open() 以文本模式 ('w', 'r', 'wt', 'rt' 等) 打开文件时,它将返回 io.TextIOBase的一个子类io.TextIOWrapper。

      file = '/data/bigfiles/静夜思.txt'
      f = open(file, mode='r', encoding='utf-8')  # f是为文件对象命名
      print(f)
      

      输出:

       
      

      建议将open()函数用上下文管理器容器中,减少遇到异常关闭文件出错的问题。

      file = '/data/bigfiles/静夜思.txt'
      with open(file, mode='r', encoding='utf-8') as f:  # 文件对象命名放在as后面
          print(f)  # 操作文件的语句放在缩进的语句块中,离开缩进就关闭文件
      

      输出:

       
      

      读文件到字符串

      1. read(size) 无参数或参数为-1时,读取全部文件内容;
      file = '/data/bigfiles/静夜思.txt'
      with open(file, mode='r', encoding='utf-8') as f:  # 为文件对象命的名放在as后面
          txt = f.read()  # 将文件全部内容读入到字符串txt中
      print(txt)
      

      输出:

      静夜思
      李白
      床前明月光,疑是地上霜。
      举头望明月,低头思故乡。
      

      编程要求

      根据提示,在右侧编辑器补充代码,输出文件“出塞.txt”全部字符。文件路径和文件名为:‘/data/bigfiles/出塞.txt’

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      预期输出:

                 出塞
                    王昌龄(唐)
      秦时明月汉时关,万里长征人未还。
      但使龙城飞将在,不教胡马度阴山。
      

      提示:

      1. 每行末有一个换行符“\n”

      本单元可能用到的文件下载:

      出塞.txt

      8.1 静夜思.txt

      唐诗三百首 (2022).txt

      7.8 唐诗三百首.txt

      8.2 score.csv

      8.5 score.csv

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      with open('/data/bigfiles/出塞.txt', mode='r', encoding='utf-8') as f: 
          print(f.read())
      

      第2关:读文件前n个字符

      任务描述

      本关任务:编写一个能读文件前n个字符的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 读文件到字符串

      读文件到字符串

      2. read(size) 当参数size为大于或等于0的整数时,读取size个字符。

      file = '/data/bigfiles/静夜思.txt'
      with open(file, mode='r', encoding='utf-8') as f:  # 为文件对象命的名放在as后面
          txt = f.read(3)  # 将文件前3个字符读入到字符串txt中
      print(txt)
      

      输出:

      静夜思
      

      编程要求

      根据提示,在右侧编辑器补充代码,输入一个正整数n,输出“出塞.txt”前n个字符。

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      3
      

      预期输出:

      静夜思
      

      测试输入:

      13
      

      预期输出:

      静夜思
      李白
      床前明月光,
      

      提示:

      1. 每行末有一个换行符“\n”

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      with open('/data/bigfiles/出塞.txt', mode='r', encoding='utf-8') as f: 
          print(f.read(int(input())))
      

      第3关:逐行读取并输出文件内容

      任务描述

      本关任务:编写一个能逐行读取并输出文件内容的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 读文件到字符串
      2. 文件指针

      读文件到字符串

      1. f.readline() 从文件中读取单行数据;字符串末尾保留换行符(\n),空行使用 ‘\n’ 表示,该字符串只包含一个换行符。

        f.readline() 返回空字符串时,表示已经到达了文件末尾。

      file = '/data/bigfiles/静夜思.txt'
      with open(file,'r',encoding = 'utf-8') as poem:  # 打开文件创建文件对象,命名为poem
          while txt := poem.readline():  # 逐行读文件,直至文件结束
              print(txt.strip())         # 去除行末的换行符后输出当前读到的字符串
      

      输出:

      静夜思
      李白
      床前明月光,疑是地上霜。
      举头望明月,低头思故乡。
      
      1. f.readline(size) 当参数size为大于或等于0的整数时,从指针所在处向后最多读取当前行的前size个字符,当前行剩余字符少于size时,读取到行末。

      编程要求

      根据提示,在右侧编辑器补充代码,输入一个文件名,用readline()方法逐行读取并输出文件内容,输出时去除每行末的换行符。

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      静夜思.txt
      

      预期输出:

      静夜思
      李白
      床前明月光,疑是地上霜。
      举头望明月,低头思故乡。
      

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      file = '/data/bigfiles/' + input()
      with open(file,'r',encoding = 'utf-8') as f:
          for line in f.readlines(): 
              print(line.strip()) 
      

      第4关:读取文件到列表中

      任务描述

      本关任务:编写一个能读取文件到列表中的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 读文件到列表

      读文件到列表

      1. readlines()

        无参数时,读取文件全部数据,返回一个列表,列表中每个元素是文件对象中的一行数据,包括行末的换行符’\n’。

      file = '/data/bigfiles/静夜思.txt'
      with open(file, 'r', encoding='utf-8') as poem:  # 打开文件创建文件对象,命名为poem
          poem_ls = poem.readlines()  # 读取文件内容到列表
      print(poem_ls)
      

      输出:

      ['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
      
      1. readlines(hint)

        当参数hint为大于或等于0的整数时,返回文件从头到第hint个字符所在的行末。

      file = '/data/bigfiles/静夜思.txt'
      with open(file, 'r', encoding='utf-8') as poem:  # 打开文件创建文件对象,命名为poem
          poem_ls = poem.readlines(10)  # 读取文件,到第10个字符所在的行末
      print(poem_ls)
      

      输出:

      ['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n']
      

      编程要求

      根据提示,在右侧编辑器补充代码,输入一个文件名,将该文件内容转为列表输出。

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      静夜思.txt
      

      预期输出:

      ['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
      

      提示:

      1. 每行末有一个换行符“\n”

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      with open(input(), 'r', encoding='utf-8') as f:
          print(f.readlines())
      

      第5关:读取文件中的数据到二维列表

      任务描述

      本关任务:编写一个能读取文件中的数据到二维列表的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 字符串切分
      2. 遍历文件转二维列表

      字符串切分

      1. txt.split(sep)

        根据分隔符sep对字符串txt进行切分,返回一个列表。

      row = '姓名,C,Java,Python,C#\n'
      print(row.strip())
      # 去除行末换行符,姓名,C,Java,Python,C#
      print(row.strip().split(','))  # 去除换行符后根据逗号切分为列表
      # ['姓名', 'C', 'Java', 'Python', 'C#']
      

      遍历文件

      虽然readlines()方法可以将文件读取到二维列表中,但其元素仍为字符串。

      很多存放数据的文件中每行数据是用逗号或空格分隔的,可以直接切分为列表,再加入到列表中,构成二维列表。

      对于这样的需求,建议使用遍历文件对象的方法。

      file = '../csv/8.2 score.csv'
      score_ls = []  # 创建一个空列表
      with open(file, 'r', encoding='utf-8') as fr:  # 打开文件创建文件对象,命名为poem
          for row in fr:                    # 遍历文件对象,row为当前行
              lst = row.strip().split(',')  # 当前行切分为一个列表
              score_ls.append(lst)          # 将当前行切分得到的列表附加到score_ls中
      print(score_ls)  # 输出二维列表
      

      列表推导式方法:

      file = '../csv/8.2 score.csv'
      with open(file, 'r', encoding='utf-8') as fr:  # 打开文件创建文件对象,命名为poem
          score_ls = [row.strip().split(',') for row in fr]                    # 遍历文件对象,row为当前行
      print(score_ls)  # 输出二维列表
      

      输出:

      [['姓名', 'C', 'Java', 'Python', 'C#'], 
      ['罗明', '95', '96', '85', '63'], 
      ['朱佳', '75', '93', '66', '85'],
      ['李思', '86', '76', '96', '93'], 
      ['郑君', '88', '98', '76', '90'], 
      ['王雪', '99', '96', '91', '88']]
      

      编程要求

      根据提示,在右侧编辑器补充代码,输入一个文件名,先读输出文件的第一行,再将该文件其他内容转为列表输出。

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      score.csv
      

      预期输出:

      [['姓名', 'C', 'Java', 'Python', 'C#'], ['罗明', '95', '96', '85', '63'], ['朱佳', '75', '93', '66', '85'], ['李思', '86', '76', '96', '93'], ['郑君', '88', '98', '76', '90'], ['王雪', '99', '96', '91', '88']] 
      

      提示:

      1. 每行末有一个换行符“\n”

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      with open('/data/bigfiles/'+input(), 'r', encoding='utf-8') as f:
          ls = [line.strip().split(',') for line in f]
          print(ls)
      

      第6关:将唐诗写入到文件中

      任务描述

      本关任务:编写一个能将指定序号的唐诗写入到单独的文件中的小程序。

      相关知识

      为了完成本关任务,你需要掌握:

      1. 文件写入

      文件写入

      1. f.write(s)

        将字符串s写入到文件对象f中。

      file = '233李白:静夜思.txt'
      poem = '静夜思\n李白\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n'
      with open(file, 'w', encoding='utf-8') as fw:  # 打开文件创建文件对象,命名为poem
          fw.write(poem)
      

      编程要求

      根据提示,在右侧编辑器补充代码,输入一个3位数字字符表示的诗的序号,从文件“/data/bigfiles/唐诗三百首.txt”中读出指定序号的诗句,再将该诗单独写入到以该诗序号开始的行为文件名的文件中。

      测试说明

      平台会对你编写的代码进行测试:

      测试输入:

      237
      

      预期输出:

      创建文件:

      237刘长卿:送灵澈.txt
      

      文件内容如下:

      237刘长卿:送灵澈
      苍苍竹林寺,杳杳钟声晚。
      荷笠带斜阳,青山独归远。
      

      提示:

      1. 每行末有一个换行符“\n”

      开始你的任务吧,祝你成功!

      参考代码

      # 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
      # 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
      def get_poem(file):
          """读唐诗300首,定位到用户输入的序号的诗,将该首诗读取为一个字符串,返回去除末尾空白字符的字符串"""
          poem = '' 
          poet_flag = False
          with open(file, 'r', encoding='utf-8') as f: 
              for line in f:
                  if  line[:3] == str(num):
                      poem = poem + line
                      poet_flag = True
                  elif line[0] in '0123456789': 
                      poet_flag = False
                  elif poet_flag:
                      poem = poem + line
              return poem
       
      def write_poem(line):
          """参数是包含指定序号诗句的字符串,提取诗的标题行做为要写入的文件名,将全部诗句按顺序写入到文件中,返回诗的标题行"""
          title = line.split(maxsplit=1)[0]
          with open(title+'.txt', 'w', encoding='utf-8') as f:
              f.write(line)
              return title
       
       
      def check_file(file):
          """参数是新创建的文件名,读取新创建并写入诗句的文件,检查是否写入成功,无返回值"""
          with open(file, 'r', encoding='utf-8') as fr:
              print(fr.read())            # 文件读取为一个字符串并输出
       
       
      if __name__ == '__main__':
          filename = '/data/bigfiles/唐诗三百首.txt'  # 源文件路径
          num = input()  # 输入序号
          poem_str = get_poem(filename)     # 读取指定序号的诗为字符串
          file_title = write_poem(poem_str)  # 字符串写入文件,并返回标题
          check_file(file_title+'.txt')     # 查看写入的文件,输出诗的内容
      
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]