头歌 Python开发技术—文件和异常3

  1. 读取文件内容

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

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

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

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

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

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

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

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

def file(name,encoding = 'utf-8'):
    '''
       读取文件内容,如文件存在,则输出文件信息,
       若文件不存在,则输出`无法打开指定的文件!`,
       若文件编码方案和打开指定编码方案不同,则输出`指定了未知的编码!`,
       若读取文件时解码错误,则输出`读取文件时解码错误!`
       :params name:文件名
       :params encoding:编码方案。默认为'utf-8'
       :return :无返回值,直接输出
       '''
    #        请在此处添加代码       #
    # *************begin************#
    if encoding != 'utf-8':
        print('指定了未知的编码!')
    else:
        try:
            fo =open(name)
            print(fo.read())
        except FileNotFoundError:
            print('无法打开指定的文件!')
    # **************end*************#

if __name__ == '__main__':
    name,encoding = input().split(',')
    file(name=name,encoding=encoding)



  1. 素数写入文件

任务描述
本关任务:编写一个将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个文件进行测试。

from math import sqrt


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():
    #         请在此处添加代码       #
    # *************begin************#
    filenames = ('a.txt','b.txt','c.txt')
    fs_list = []
    try:
        for filename in filenames:
            fs_list.append(open(filename,'w',encoding = 'utf-8'))
        for number in range(1,10000):
            if is_prime(number):
                if number <100:
                    fs_list[0].write(str(number)+'\n')
                elif number <1000:
                    fs_list[1].write(str(number)+'\n')
                else:
                    fs_list[2].write(str(number)+'\n')
    except IOError as ex:
        print(ex)
        print('写文件时发生错误!')
    finally:
        for fs in fs_list:
            fs.close()
    # print('操作完成')
    # **************end*************#




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

相关知识
为了完成本关任务,你需要掌握: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

from os import listdir
from os.path import join,isfile,isdir
def listDir(director):
    """
     遍历文件夹,如果是文件就直接输出当前文件绝对路径,
     如果是文件夹,就输出当前文件夹路径,
     然后接着遍历该子文件夹,直到指定文件夹被全部遍历完。

     :param director: 需遍历的路径
     :return:无返回值,直接输出
     """
    #        请在此处添加代码       #
    # *************begin************#
    if not isdir(director):
        # print("no")
        return 
    for x in listdir(director):
        temp = join(director,x)
        if isfile(temp):
            print(temp)
        elif isdir(temp):
            print(temp)
        listDir(temp)
    # **************end*************#




  1. 读写json文件

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

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

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

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

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

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

import json
def main(name):
 #        请在此处添加代码         #
 # *************begin************#
    attribute = []
    ans = []
    try:
        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)
    except Exception as e:
        print(e)
 # **************end*************#
        
if __name__ == '__main__':
    name = input()
    main(name)
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值