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

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

测试输入:

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

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

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

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

测试输入:
3
预期输出:
静夜思

测试输入:
13
预期输出:
静夜思
李白
床前明月光,

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

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

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

测试输入:
静夜思.txt
预期输出:
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。

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

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

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

测试输入:
静夜思.txt

预期输出:
[‘静夜思\n’, ‘李白\n’, ‘床前明月光,疑是地上霜。\n’, ‘举头望明月,低头思故乡。’]

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

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

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

测试输入:
score.csv

预期输出:
姓名,C,Java,Python,C#
[‘罗明,95,96,85,63\n’, ‘朱佳,75,93,66,85\n’, ‘李思,86,76,96,93\n’, ‘郑君,88,98,76,90\n’, ‘王雪,99,96,91,88’]

file = input()
score_ls = []  # 创建一个空列表
with open('/data/bigfiles/'+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[0])
a = score_ls[0]
b = map(str, a)  
c = ','.join(b)
print(c) 
print(score_ls[1:])  # 输出二维列表

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

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

测试输入:
237

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

文件内容如下:
237刘长卿:送灵澈

苍苍竹林寺,杳杳钟声晚。
荷笠带斜阳,青山独归远。

import re
def get_poem(file):
    """读唐诗300首,定位到用户输入的序号的诗,将该首诗读取为一个字符串,返回去除末尾空白字符的字符串"""
    with open(file, mode='r', encoding='utf-8') as file:
        content=file.read()
        pattern2 = str(num) + r'(.+?)\d{3}'    # 其余通用匹配
        pattern3 = str(num) + r'(.+?)$'        # 320特殊情况
        if num != '320':
            local = re.findall(pattern2, content, re.S)[0]  # re.S 匹配换行符 支持多行匹配
            #print(num+local.split(' \n\n')[0])      # 去除诗末空格和俩换行
            return (num+local.split(' \n\n')[0])            
        else:
            local = re.findall(pattern3, content, re.S)[0]
            #print(num+local)
            return (num+local)
      
def write_poem(line):
    """参数是包含指定序号诗句的字符串,提取诗的标题行做为要写入的文件名,将全部诗句按顺序写入到文件中,返回诗的标题行"""
    #print(line)
    if not line == None:
        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')     # 查看写入的文件,输出诗的内容