赞
踩
1.有一个文本文件sample.txt,其内容包含小写字母和大写字母。请将该文件复制到另一文件sample_copytxt,并将原文件中的小写字母全部转换为大写字母,其余格式均不变。
2.统计上述转换后的文本26个大写字母的个数,按个数从大到小排序,并绘制条形图。
1.首先需要对文件进行复制,导入shutil模块,使用其中的copyfileobj函数对文件进行复制;然后将原文件中的小写字母转为大写字母,这里使用两个变量,一个为字符串类型的空变量lineupdate,一个为列表类型的空变量lsupdate,lineupdate用于暂时存储每次转换后的一行文本,添加到lsupdate列表中,添加完毕后,将lineupdate置空,继续循环处理下一行文本,通过seek(0)将指针指向文本头部,writelines()将列表写入文件。这样就将文本中所有的文本转换为大写字母。再次返回到文件头部,通过read()方法将所有含有大写字母的文件赋值给text变量。
2.要统计26个字母的个数,将text转变为一个字典dict_text,其中键为字母的类型,值为字母的个数(),通过集合set()去除重复的字母,通过count()函数计算字符串中对应字母的数量,然后通过sorted()函数对字典进行排序,设置函数里面的key参数使得字典按照字典的值进行排序,reverse设置为True使得字典从大到小排序。
3.绘制条形图,将字典中的键作为坐标轴的横轴,字典的键作为坐标轴的纵轴,使用plt.text命令在条形图上标注字母的个数。
相关函数:
作用:实现对文件的复制
参数:sourcefile copyfile,其中sourcefile为原文件名,copyfile为复制文件的文件名。
作用:将文件中的小写字母转换为大写字母,然后返回读取大写字母文件
参数:sourcefile,其中sourcefile为原文件名。
作用:将输入的字符串以字典的形式输出,其中字典按照字符串里字母的个数的大小进行排序
参数:text,其中text为字符串
作用:根据字典中的键值对绘制条形图,其中条形图横轴为字典的键,纵轴为字典的值,同时将字典的值置于条形图的上面。
参数:dict_text,其中dict_text为一个字典
作用:将函数放入到该函数中,如果调用则统一执行。
参数:sourcefile copyfile,其中sourcefile为原文件名,copyfile为复制文件的文件名。
1.小写字母转换为大写字母的文件(如图1)
图1 小写字母转换为大写字母的结果
2 .复制之后的文件(如图2)
图2 复制之后的文件
3.文本文件中对应字母类型的文件(如图3)
图3 文本文件中对应字母类型的文件
次文件
import matplotlib.pyplot as plt import shutil class Solution: def file_copy(self, sourcefile, copyfile): f1 = open(sourcefile, 'r+', encoding='utf-8') f2 = open(copyfile, 'w', encoding='utf-8') shutil.copyfileobj(f1, f2) def file_alpha_lower_to_upper(self, sourcefile): f1 = open(sourcefile, 'r+', encoding='utf-8') ls = f1.readlines() # 此时读取指针已到了文本末尾 读取出来是一个列表 lineupdate = str() lsupdate = list() for line in ls: for i in line: if i.islower(): # 判断一个字符是否是小写字母 i = i.upper() lineupdate += i # 生成新的字符串 lsupdate.append(lineupdate) # 将新生成的字符串追加到列表中 lineupdate = '' # 清空lineupdate的内容 f1.seek(0) # 将指针移动到文本头部 f1.writelines(lsupdate) # 将列表写入文本中,此时指针已经移动到文本末尾 f1.seek(0) text = f1.read() f1.close() return text def count_sort_alpha(self, text): dict_text = dict([(x, text.count(x)) for x in set(text) if str(x).isalpha()]) dict_text = dict(sorted(dict_text.items(), key=lambda dict_text: (dict_text[1], dict_text[0]), reverse=True)) return dict_text def show_graph(self, dict_text): plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.family'] = 'FangSong' X = dict_text.keys() Y = dict_text.values() plt.tick_params(labelsize=13) # 设置坐标轴上的刻度的标签字体大小 plt.xlabel('字母类型') plt.ylabel('字母个数(个)') plt.title('文本文件中对应字母类型及个数') # plt.ylim([0, 100]) # 绘图 plt.bar(X, Y) #plt.grid() for x, y in zip(X, Y): plt.text(x, y + 0.5, y, ha='center', fontsize=13) plt.show() def start(self, sourcefile, copyfile): self.file_copy(sourcefile, copyfile) text = self.file_alpha_lower_to_upper(sourcefile) dict_text = self.count_sort_alpha(text) self.show_graph(dict_text)
主文件
from task.file.file import Solution
my_solution = Solution()
sourcefile = input('Please input the sourcefile:')
copyfile = input('Please input the copyfile:')
my_solution.start(sourcefile, copyfile)
y_solution = Solution()
sourcefile = input('Please input the sourcefile:')
copyfile = input('Please input the copyfile:')
my_solution.start(sourcefile, copyfile)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。