文件翻转教学python

目录


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

任务描述

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

相关知识

为了完成本关任务,你需要掌握: 1.文件的打开 2.读文件到字符串

file = '/data/bigfiles/出塞.txt'
with open(file, mode='r', encoding='utf-8') as f:  # 为文件对象命的名放在as后面
    txt = f.read()  # 将文件全部内容读入到字符串txt中
print(txt)

第2关 读文件前n个字符

任务描述

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

相关知识

为了完成本关任务,你需要掌握: 1.读文件到字符串

读文件到字符串

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

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

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

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

相关知识

为了完成本关任务,你需要掌握: 1.读文件到字符串 2.文件指针

读文件到字符串

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

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

第4关 读取文件到列表中

任务描述

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

相关知识

为了完成本关任务,你需要掌握: 1.读文件到列表

读文件到列表

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

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

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

任务描述

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

相关知识

为了完成本关任务,你需要掌握: 1.字符串切分 2.遍历文件转二维列表

字符串切分

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

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

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

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

测试说明

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

测试输入: 237

预期输出: 创建文件: 237刘长卿:送灵澈.txt

def get_poem(file):
    """读唐诗300首,定位到用户输入的序号的诗,将该首诗读取为一个字符串,返回去除末尾空白字符的字符串"""
    poem = ''                              # 空字符串,用于容纳目标诗
    poet_flag = False                      # 做一个标记,假定当前行不是目标诗
    with open(file, 'r', encoding='utf-8') as fr:  # 创建文件对象
            for line in fr:                    # 遍历文件对象
                # 当当前行包含序号(序号用3位数,不足3位前面补0)时,将当前行拼接到poem上,改变poet_flag的值为True
                if  line[:3] == str(num):
                    poem = poem + line
                    poet_flag = True
                elif line[0] in '0123456789':  # 若当前行不包含序号但有数字
                    poet_flag = False          # 改变标记,后续几行不是目标诗句
                elif poet_flag:                # 如果标记值为真(True)
                    poem = poem + line         # 将当前行拼接到字符串上
            return poem                        # 遍历结束后返回包含目标诗的字符串


def write_poem(line):
    """参数是包含指定序号诗句的字符串,提取诗的标题行做为要写入的文件名,将全部诗句按顺序写入到文件中,返回诗的标题行"""

    title = line.split(maxsplit=1)[0]  # 这里的maxsplit参数是最大拆分数,我们只需要拆分一次
    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')     # 查看写入的文件,输出诗的内容

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年6月11日
下一篇 2023年6月11日

相关推荐