《Python程序设计实验教程——以医药数据处理为例》第七章简单操作题

摘要:本文旨在帮助中国药科大学的学生学习必修课《Python与医药大数据处理》,在实验操作题方面给予代码参考。
欢迎各界人士共同讨论Python相关话题,并给予宝贵建议。

目录

PY70201:文本文件内容提纯

PY70202:文本文件内容统计

PY70203:删除列表元素

PY70204:统计引号内字符比例


PY70201:文本文件内容提纯

要求:《诗经》是中国古代的一部诗歌总集,收集了西周初年至春秋中叶的311篇诗歌,反映了周初至周晚期约500年间的社会面貌。文件夹提供了一个网络版本的《诗经》节选,文件名称为“诗经.txt”,其内容采用“原文”,“注释”,“题解”相结合的形式组织,通过“【原文】”标记《诗经》原文内容,通过“【注释】”标记《诗经》注释内容,通过“【题解】”标记《诗经》诗文题旨的阐释。

文件格式框架如下:

【原文】
关雎(必读)
关关(1)雎鸠,在河(2)之洲。窈窕(3)淑女,君子(4)好逑。
参差(5)荇菜,左右流(6)之。窈窕淑女,寤寐(7)求之。
求之不得,寤寐思服(8)。悠哉悠哉(9),辗转反侧(10)。
参差荇菜,左右采之。窈窕淑女,琴瑟友(11)之。
参差荇菜,左右芼(12)之。窈窕淑女,钟鼓乐(13)之。
【注释】
1、关关:雎鸠和鸣声。雎鸠(居纠jū jiū):一种水鸟名,即鱼鹰。
2、河:黄河。洲:水中央的陆地。一二句是诗人就所见以起兴(起头儿)。
3、窈窕:容貌美好。淑:善,品德贤良。淑女:好姑娘。
4、君子:《诗经》中贵族男子的通称。好:男女相悦。逑:同“仇”,配偶。“好”、“逑”在这里是动词(和《尚书大传》所载《微子歌》“不我好仇”句同例),就是爱慕而希望成为配偶的意思。
5、参差:不齐。荇(杏xìng)菜:生长在水里的一种植物,叶心脏形,浮在水上,可以吃。
6、流:通“摎(究jiū)”,就是求或者捋取。和下文“采”、“芼”义相近。以上两句言彼女左右采荇。她采荇时的美好姿态使那“君子”时刻不忘,见于梦寐。
7、睡醒为“寤”,睡着为“寐”。“寤寐”在这里犹言“日夜”。
8、服(古读如愎bì):思念。“思”、“服”两字同义。
9、悠哉悠哉:犹“悠悠”,就是长。这句是说思念绵绵不断。
10、“辗”就是转。“反”是覆身而卧。“侧” 是侧身而卧。“辗转反侧”是说不能安睡。第二、三章写“思服”之苦。
11、友:亲爱。“友”字古读如“以”,和上文“采(古音cǐ)”相韵。
12、芼(茂mào):“覒(茂mào)”的借字,就是择、拔。“芼之”也就是“流之”、“采之”的意思,因为分章换韵所以变换文字。
13、乐:娱悦。“友”、“乐”的对象就是那“采”、“芼”之人。最后两章是设想和彼女结婚。琴瑟钟鼓的热闹是结婚时应有的事。
【题解】
这诗写男恋女之情。大意是:河边一个采荇菜的姑娘引起一个男子的思慕。那“左右采之”的窈窕形象使他寤寐不忘,而“琴瑟友之”、“钟鼓乐之”便成为他寤寐求其实现的愿望。

······

(1)提取文件“诗经.txt”中所有诗歌名,输出并保存为文件“诗经-目录.txt”。具体要求:保留文件中所有【原文】标签下面的诗歌名,并标出序号,诗歌名后的小括号及内部文字(如“必读”文字信息)请保留。输出文件格式如下:

1关雎(必读)
2葛覃(必读)
3卷耳(必读)
4樛木
5螽斯
6桃夭
7兔罝
8芣苢(必读)
9汉广(必读)
10汝坟 

······

fi=open("诗经.txt","r")
fo=open("诗经-目录.txt","w")
flag=False
i=0
for line in fi:
    if line.strip()=="【原文】":
        flag=True
        continue     
    if flag and line.strip():
        i+=1
        fo.write(str(i)+line.strip()+"\n")
        flag=False
fi.close()
fo.close()

(2)对文件“诗经-目录.txt”进一步提纯,去掉每行文字中的所有小括号(文件中的小括号均采用英文字符)及内部文字“必读”,保存为“诗经-目录提纯.txt”文件。输出文件格式如下:

1关雎
2葛覃
3卷耳
4樛木
5螽斯
6桃夭
7兔罝
8芣苢
9汉广
10汝坟

······

fi=open("诗经-目录.txt","r")
fo=open("诗经-目录提纯.txt","w")
for line in fi:
    line=line.replace("(必读)","")
    fo.write(line)
fi.close()
fo.close()

PY70202:文本文件内容统计

要求:文本文件“sensor.txt”中保存的是实验小白鼠随身佩戴的位置传感器采集数据,其内容如下所示:

2016/5/31 0:05, vawelon001,1,1
2016/5/31 0:20, earpa001,1,1
2016/5/31 2:26, earpa001,1,6
2016/5/31 2:31, vawelon001,1,6
2016/5/31 3:12, earpa001,1,1

······

其中,第一列是传感器获取数据的时间,第二列是传感器的编号,第三列是传感器所在的实验箱号,第四列是传感器坐在的位置区域编号

(1)读入文件“sensor.txt”中的数据,提取出传感器编号为“earpa001”的所有数据,将结果输出并保存到文件“earpa001.txt”中。输出文件格式要求:原数据文件中的每行记录写入新文件中,行尾无空格,无空行

2016/5/31 0:20, earpa001,1,1
2016/5/31 2:26, earpa001,1,6
2016/5/31 3:12, earpa001,1,1
2016/5/31 5:57, earpa001,1,6
2016/5/31 6:59, earpa001,1,1

fi=open("sensor.txt","r")
fo=open("earpa001.txt","w")
for line in fi:
    ls=line.strip("\n").split(",")
    if ls[1]==" earpa001":
        print(ls[0],ls[1],ls[2],ls[3])
        fo.write('{},{},{},{}\n'.format(ls[0],ls[1],ls[2],ls[3]))
fi.close()
fo.close()

(2)读入文件“earpa001.txt”中的数据,统计“earpa001”对应的小白鼠在各实验箱和区域出现的次数,将结果输出并保存到文件“earpa001_count.txt”中。输出文件格式要求,每条记录一行,位置信息和出现的次数之间用英文半角逗号隔开,行尾无空格,无空行

1-1,3
1-6,2

fi=open("earpa001.txt","r")
fo=open("earpa001_count.txt","w")
d={}
for line in fi:
    ls1=line.strip("\n").split(",")
    t=ls1[2]+"-"+ls1[3]
    d[t]=d.get(t,0)+1
ls=list(d.items())
ls.sort(key=lambda x:x[1], reverse=True)
for i in ls:
    fo.write('{},{}\n'.format(i[0],i[1]))
fi.close()
fo.close()

PY70203:删除列表元素

要求:将列表[51,33,43,78,89,23,54,112,80,4,5,9,63]中的素数删除,输出删除素数后列表的元素个数,并将结果保存在文本文件“PY70203.txt”中

>>>[51, 33, 78, 54, 112, 80, 4, 9, 63],列表长度为9

fo=open("PY70203.txt","w")
def prime(num):
    for i in range(2,num):
        if num%i==0:
            return False
            break
    return True
ls=[51,33,43,78,89,23,54,112,80,4,5,9,63]
ls_new=[]
for i in ls:
    if prime(i)==False:
        ls_new.append(i)
fo.write(">>>{},列表长度为{}".format(ls_new,len(ls_new)))
fo.close()

PY70204:统计引号内字符比例

要求:编写程序,统计文本文件“人工智能在药物发现中的应用与挑战.txt”中出现在小括号内的所有字符占文本总字符的比例(该文本文件中的标点符号均采用中文字符),将统计结果写入文件“PY70204.txt”中

【占总字符比例:】8%

fi=open("人工智能在药物发现中的应用与挑战.txt","r",encoding="utf-8")
fo=open("PY70204.txt","w")
txt=fi.read()
cnt=0
flag=False
for i in txt:
    if i=="(":
        flag=True
        continue
    if i==")":
        flag=False
    if flag:
        cnt+=1
fo.write("【占总字符比例:】{:.0%}".format(cnt/len(txt)))
fi.close()
fo.close()
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜半夏.1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值