第一关:读取文件内容
本关任务:编写一个能读取文件内容的函数。
相关知识
为了完成本关任务,你需要掌握: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)