头歌python实训通关六——文件和异常——基础

第1关:读取文件内容

任务描述

本关任务:编写一个能读取文件内容的函数。

相关知识

为了完成本关任务,你需要掌握:1.文件读写,2.异常处理。

编程要求

根据提示,在右侧编辑器补充代码,如文件存在,则输出文件信息,若文件不存在,则输出无法打开指定的文件!,若文件编码方案和打开指定编码方案不同,则输出指定了未知的编码!,若读取文件时解码错误,则输出读取文件时解码错误!

测试说明

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

测试输入: 致橡树.txt,utf-8

说明:致橡树.txt文件存在,编码方案encoding默认为utf-8 预期输出:


  1. 我如果爱你——
  2. 绝不像攀援的凌霄花,
  3. 借你的高枝炫耀自己;
  4. 我如果爱你——
  5. 绝不学痴情的鸟儿,
  6. 为绿荫重复单调的歌曲;
  7. 也不止像泉源,
  8. 常年送来清凉的慰藉;
  9. 也不止像险峰,
  10. 增加你的高度,衬托你的威仪。
  11. 甚至日光,
  12. 甚至春雨。
  13. 不,这些都还不够!
  14. 我必须是你近旁的一株木棉,
  15. 作为树的形象和你站在一起。
  16. 根,紧握在地下;
  17. 叶,相触在云里。
  18. 每一阵风过,
  19. 我们都互相致意,
  20. 但没有人,
  21. 听懂我们的言语。
  22. 你有你的铜枝铁干,
  23. 像刀,像剑,也像戟;
  24. 我有我红硕的花朵,
  25. 像沉重的叹息,
  26. 又像英勇的火炬。
  27. 我们分担寒潮、风雷、霹雳;
  28. 我们共享雾霭、流岚、虹霓。
  29. 仿佛永远分离,
  30. 却又终身相依。
  31. 这才是伟大的爱情,
  32. 坚贞就在这里:
  33. 爱——
  34. 不仅爱你伟岸的身躯,
  35. 也爱你坚持的位置,
  36. 足下的土地。

测试输入: tt.txt,utf-8 说明:tt.txt不存在,编码方案encoding默认为utf-8 预期输出: 无法打开指定的文件!

测试输入: 致橡树.txt,ajgfahajfhak; 说明:致橡树.txt存在,编码方案encoding为ajgfahajfhak 预期输出: 指定了未知的编码!

import os
def file(name,encoding = 'utf-8'):
    if os.path.isfile(name):
        if encoding=='utf-8':
            f=open(name,'r',encoding=encoding)
            fi=f.read()
            print(fi,end='')
            f.close()
        else:
            print("指定了未知的编码!")
    else:
        print("无法打开指定的文件!")
if __name__ == '__main__':
    name,encoding = input().split(',')
    file(name=name,encoding=encoding)


第2关:素数写入文件

任务描述

本关任务:编写一个将1-9999之间的素数分别写入三个文件中(1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中)。

相关知识

为了完成本关任务,你需要掌握:1.文件读写,2.循环语句,3.条件语句,4.函数定义及调用。

编程要求

根据提示,在右侧编辑器补充代码,将1-99之间的素数保存在a.txt中,100-999之间的素数保存在b.txt中,1000-9999之间的素数保存在c.txt中。

测试说明

本次题目不需输入输出,只需将规定的素数保留到规定文件中,平台会编写测试脚本对3个文件进行测试。 a.txt中数据格式为

  1. 2
  2. 3
  3. 5
  4. 7
  5. 11
  6. 13
  7. 17
  8. 19
  9. 23
  10. 29
  11. 31
  12. 37
  13. 41
  14. 43
  15. 47
  16. 53
  17. 59
  18. 61
  19. 67
  20. 71
  21. 73
  22. 79
  23. 83
  24. 89
  25. 97
from math import sqrt
import os

def is_prime(n):
    """判断素数的函数"""
    assert n > 0
    for factor in range(2, int(sqrt(n)) + 1):
        if n % factor == 0:
            return False
    return True if n != 1 else False


def store():
    for i in range(1,10000):
        if 1< i and i < 100:
            if is_prime(i):
                f=open("a.txt",'a')
                f.write(str(i)+"\n")
                f.close()
        elif 99

第3关:输出文件目录

任务描述

本关任务:遍历文件夹,采用深度优先遍历策略,以便输出要求的内容。

相关知识

为了完成本关任务,你需要掌握:1.os模块中相关文件目录操作。

编程要求

根据提示,在右侧编辑器补充代码,遍历文件夹,并输出规定内容。

测试说明

平台会对你编写的代码进行测试: 如有一目录如下:

对上述目录进行测试 测试输入:C:\\test; 预期输出: C:\test\D1 C:\test\D1\1.txt C:\test\D1\F1 C:\test\D1\F1\3.txt C:\test\D2 C:\test\D2\2.py

import os
def listDir(director):
    path=director
    for files in os.listdir(path):
        filepath=os.path.join(path,files)
        if os.path.isdir(filepath):
            print(filepath)
            listDir(filepath)
        else:
            print(filepath)

第4关:读写json文件

任务描述

本关任务:编写一个能读写json文件的程序。

相关知识

为了完成本关任务,你需要掌握:1.json模块,2.读取txt文件,3.列表字典的使用

编程要求

根据提示,在右侧编辑器补充代码,输出要求的内容。

测试说明

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

测试输入: 文件与异常/src/step4/book.txt

预期输出: [{'书名': 'python程序设计', '价钱': '39'}, {'书名': '数据结构', '价钱': '49'}, {'书名': 'C语言程序设计', '价钱': '42'}]

import json
def main(name):
    ans=[]
    with open(name,'r') as f:
        title = f.readline()
        title = title.replace("\n","").split(" ")
        while True:
            content = f.readline()
            if content == "":break
            content = content.replace("\n","").split(" ")
            temp = dict(zip(title,content))
            ans.append(temp)
    print(ans)          
if __name__ == '__main__':
    name = input()
    main(name)

你可能感兴趣的:(头歌python实训通关,python,开发语言)