第七阶段 文件
实验一 文本文件的读取
第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),是一种用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型。
<?xml version="1.0" encoding="utf-8"?>
<data count='3'>
<student name='赵昊' age='15' sex='男性'></student>
<student name='龙傲天' age='16' sex='男性'></student>
<student name='玛丽苏' age='15' sex='女性'></student>
</data>
第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 "" #随便返回一个值,评测代码不会有找不到的数据