头歌Python课内实验2-1:文件和异常--基础

第一关:读取文件内容

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

相关知识

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

编程要求

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

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

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

第二关:素数写入文件

本关任务:编写一个将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中。

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************#
    filesname=('a.txt','b.txt','c.txt')
    fp=[]
    for filename in filesname:
        fp.append(open(filename,'w',encoding='utf-8'))
    for num in range(1,10000):
        if is_prime(num):
            if num<100:
                fp[0].write(str(num)+'\n')
            elif num<1000:
                fp[1].write(str(num)+'\n')
            else:
                fp[2].write(str(num)+'\n')
                
    # **************end*************#

第三关:输出文件目录

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

相关知识

为了完成本关任务,你需要掌握: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
from os import listdir
from os.path import join,isfile,isdir
def listDir(director):
    """
     遍历文件夹,如果是文件就直接输出当前文件绝对路径,
     如果是文件夹,就输出当前文件夹路径,
     然后接着遍历该子文件夹,直到指定文件夹被全部遍历完。

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

第四关:读取json文件

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

相关知识

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

编程要求

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

测试说明

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

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

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

import json
def main(name):
#         请在此处添加代码         #
#  *************begin************#
    with open(name,'r') as f:
        book_rows=[]
        for line in f.readlines():
            line_list=line.strip('\n').split(' ')
            book_rows.append(line_list)
    fields=book_rows[0]
    book_rows=book_rows[1:]
    book_list=[]
    for i in range(0,len(book_rows)):
        temp=zip(fields,book_rows[i])
        book_list.append(dict(temp))
    with open('book.json','w',encoding='utf-8') as fp:
        json.dump(book_list,fp)
    with open('book.json','r') as fs:
        print(json.loads(fs.read()))
 # **************end*************#
        
if __name__ == '__main__':
    name = input()
    main(name)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值