头歌实践教学平台 Python程序设计 实训答案(三)

第七阶段 文件

实验一 文本文件的读取

第1关:学习-Python文件之文本文件的读取

任务描述
本关任务:使用 open 函数以只写的方式打开文件,打印文件的打开方式。

相关知识
为了完成本关任务,你需要掌握:

文本文件;
open 函数及其参数;
文件打开模式;
文件对象常用属性;
关闭文件 close 函数。

# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用 open 函数打开文件,打印文件的打开方式
f=open('src/step1/data.txt','w',encoding="utf8")
print('文件打开方式为:'+f.mode)
########## End ##########

实验二 文本文件的顺序读写

第1关:学习-Python文件之文本文件的顺序读写

任务描述
本关任务:给定一个文件 data.csv,内容如下:

Temperature data
----------------
Fahrenheit degrees: 67.2
请读取文件,获取文件中的数字内容。

相关知识
本关将介绍文件内容读写相关的函数:read,readable,readline,readlines,write,writable,writelines,完成本关任务时,需要使用其中的一部分。

########## Begin ##########
# 请使用 open 函数读取文件中的指定内容
f=open('src/step1/data.csv','r',encoding='utf8')
b=f.readlines()
a=b[-1]
c=a.find(':')
d=a[c+2:]
print('文件中的数字内容为:'+d)
########## End ##########

实验三 上下文管理语句with

第1关:学习-Python文件之上下文管理语句with

任务描述
本关任务:使用 with 语句读取文件中的每行的内容。

相关知识
为了完成本关任务,你需要掌握 with 语句的使用。

# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用 with 语句读取文件内容,并打印每一行内容的列表
i=input()
b='src/step1/file/'+i
with open(b,'r')as f:
    print(f.readlines())
########## End ##########

实验四 文本文件的随机读写

第1关:学习-Python文件之文本文件的随机读写

任务描述
本关任务:请读取文件,获取文件中的数字内容。

相关知识
文件的随机读写涉及到 seek、seekable、tell、truncate 四个函数,完成本关任务需要使用其中部分函数。

########## Begin ##########
# 请使用随机读取中的函数来完成本关
dai=input()
f=open(dai,'rb')
f.seek(-4,2)
print("文件中的数字内容为:"+str(f.read(),encoding="utf8"))
########## End ##########

实验五 目录访问

第1关:学习-Python文件之目录访问

任务描述
本关任务:使用 Python 中的 os 模块处理文件。

相关知识
本关将介绍 Python 的 os 模块中的常用函数以及 os.path 模块,完成本关任务需要使用到其中一部分。

# 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 第一步:打印当前的工作路径
import os

# 第二步:打印当前目录下的所有文件以及文件夹的列表
print(os.getcwd())
print(os.listdir())

########## End ##########

实验六 Excel文件的读写(不做考试要求)

第1关:学习-Python文件之Excel文件的读写

任务描述
本关任务:读取 xls 文件中所有合并单元格的内容。

相关知识
为了完成本关任务,你需要掌握:

1、xlrd 模块;
2、xlwt 模块。

# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
########## Begin ##########
# 使用 xlrd 模块读取每个合并单元格的内容并打印
import xlrd
bao=input()
data=xlrd.open_workbook(bao,formatting_info=True)
sheet1 = data.sheet_by_name("Sheet1")
for x in sheet1.merged_cells:
    print(sheet1.cell_value(x[0], x[2]))
########## End ##########

第八阶段 正则化与数字化

实验一 正则表达式

第1关:正则表达式基础知识

任务描述
本关任务:编写代码,通过re.findall()模块匹配内容。

相关知识
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,来筛选出符合这个规则的内容。

可以简单理解为:一个强大的搜索工具中,正则表达式就是你要搜索内容的条件表达式。

为了完成本关任务,你需要掌握:1.正则模块函数re.findall(),2.各种正则表达式元字符的含义。

import re
text = input()
#********** Begin *********#
#1.匹配字符单词 Love
print(re.findall(r'Love',text))
#2.匹配以 w 开头的完整单词
print(re.findall(r'\bw\w*\b',text))
#3.查找三个字母长的单词(提示:可以使用{m,n}方式)
print(re.findall(r'\b\w{3,3}\b',text))
#********** End **********#

第2关:re 模块中常用的功能函数(一)

任务描述
上一关我们已经接触了re.findall()函数,现在我们继续学习 Python 正则模块中常用的功能函数吧。

本关任务:编写代码,匹配相应的内容。

相关知识
为了完成本关任务,你需要掌握:1.compile()函数,2.match()函数,3.search()函数。

import re
text = input()
#********** Begin *********#
#1.用compile方法,匹配所有含字母i的单词
rr = re.compile(r'\w*i\w*')
print(rr.findall(text))

#2.在字符串起始位置匹配字符The是否存在,并返回被正则匹配的字符串
print(re.match('The',text).group())

#3.在整个字符串查看字符is是否存在,并返回被正则匹配的字符串
print(re.search('is',text).group())

#********** End **********#

第3关:re 模块中常用的功能函数(二)

任务描述
本关任务:编写代码,匹配相应的内容。

相关知识
为了完成本关任务,你需要掌握:
1.finditer()函数;
2.split()函数;
3.sub()函数;
4.subn()函数。

import re
text = input()
#********** Begin *********#
#1.匹配以t开头的所有单词并显示
itext = re.finditer(r'\bt\w*\b',text )
for i in itext:
    print(i.group())
#2.用空格分割句子
print(re.split(r'\s+',text ))
#3.用‘-’代替句子中的空格 
print(re.sub(r' ','-',text ))
#4.用‘-’代替句子中的空格,并返回替换次数
print(re.subn(' ','-',text ))
#********** End *********3*#

实验二 JSON与XML(不做考试要求)

第1关:JSON篇:JSON基础知识

任务描述
本关任务:手动编写一个 JSON 格式的数据文件。

相关知识
JSON 全称:JavaScript Object Notation(JavaScript 对象表示法),是一种轻量级的文本数据交换格式。与接下来要介绍的 XML 相比,拥有更小、更快、更易解析的特点。

{
    "students":[
        {"name":"赵昊","age":15,"ismale":true},
        {"name":"龙傲天","age":16,"ismale":true},
        {"name":"玛丽苏","age":15,"ismale":false}
    ],
    "count":3
}

第2关:JSON篇:使用json库

任务描述
本关任务:编写一个能读取并修改 JSON 数据的程序。

相关知识
json库是 Python 内置的一个用于操作 JSON 数据的库,提供了几个函数用于解析与生成(或者说反序列化与序列化)JSON 格式的数据。

import json

def Func():
    data = open("step2/2017.txt","r",encoding = "utf-8")

    obj = json.load(data)

    data.close()
    
    #********** Begin *********#
    infos=obj["infos"]
    for i in range(len(infos)):
        infos[i]['age']+=1
    infos.append({"name":"叶良辰" , "age":17 ,"height": 1.87, "sex" : "男性"})
    obj={"count":4,"infos":infos}

    #********** End **********#
    output = open("step2/2018.txt","w",encoding = "utf-8")
    json.dump(obj,output) #输出到文件
    output.close()

第3关:XML篇:XML基础知识

任务描述
本关任务:手动编写一个 XML 格式的数据文件。

相关知识
XML 全称可扩展标记语言(EXtensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型。






第4关:XML篇:使用SAX库解析XML

任务描述
本关任务:解析 XML 文件,输出个人信息。

相关知识
SAX是一种基于事件驱动的 API,使用SAX解析 XML 时,主要分两个部分:解析器和事件处理器。

解析器
解析器负责读取 XML 文档,并向事件处理器发送事件,比如元素开始跟元素结束事件。
SAX提供了两个函数:parse和parseString。前者用于从文件中解析 XML 数据,后者用于从字符串中解析 XML 数据。

import xml.sax
class Handler(xml.sax.ContentHandler):
    #********** Begin *********#
    infostart = False
    def startElement(self,name,attrs):
        self.infostart = name == "info"
    def endElement(self,name):
        self.infostart = False
    def characters(self,content):
        if self.infostart:
            print(content)
    #********** End **********#                                 
def GetHandler():
    return Handler()

第5关:XML篇:使用ElementTree解析XML

任务描述
本关任务:设计一个查询个人信息的小程序。

ElementTree
xml.etree.ElementTree模块是一个轻量级的 DOM(文件对象模型),具有方便友好的 API。代码可用性好,速度快,消耗内存少。
ElementTree模块大致可以三部分:ElementTree类,Element类以及一些操作 XML 的函数。

import xml.etree.ElementTree as ET
class InfoManager:
    doc = None
    root = None
    def LoadInfo(self):
        self.doc = ET.parse("step5/data.xml")
        self.root = self.doc.getroot()
    def GetInfoCount(self):
        return int(self.root.get("count"))
    def GetAge(self,name):
        infos = self.root.findall("info")
        for s in infos: #搜索name属性与函数参数name的值相同的xml元素
            if s.get("name") == name:
                return int(s.get("age"))
        return 0 #随便返回一个值,评测代码不会有找不到的数据
    def GetDescription(self,name):
        infos = self.root.findall("info")
        for s in infos: #搜索name属性与函数参数name的值相同的xml元素
            if s.get("name") == name:
                return s.text
        return "" #随便返回一个值,评测代码不会有找不到的数据

        

你可能感兴趣的:(头哥实践教学平台实训答案,python)