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