diff --git a/源码.py b/源码.py new file mode 100644 index 0000000..0636d31 --- /dev/null +++ b/源码.py @@ -0,0 +1,126 @@ +import jieba +import re +import os +import wordcloud +import numpy as np +from PIL import Image +now=0 +import os +def show_files(path): + ''' + path:文件目录 + 获取全部文件目录并让用户选定执行文件。 + 返回文件目录 + ''' + numb = 0#记录文件个数 + file_list=[]#保存文件路径 + for root , dicts, files in os.walk(path): + for d in dicts: + dpath = os.path.join(root,d) + if "txt" in dpath: + file_list.append(dpath) + numb= numb +1 + print("%d---"%numb+d)#显示文件名 + + for f in files:#保存文件路径 + fpath = os.path.join(root, f) + if "txt" in fpath: + file_list.append(fpath) + numb = numb + 1 + print("%d---"% numb + f ) + file_num = int(input("这是全部的文件名,请输入你要处理的文件序号:")) + while True:#输入所需统计的文件编号 + if file_num<=0 or file_num>numb:#不合法重新输入 + file_num = int(input("输入的序号不合法,请重新输入:")) + else: + break + file_path = file_list[file_num-1] + return file_path#返回文件名 +def get_fileDiretory(): + ''' + 使用os模块获取程序文件所在的目录 + 返回为该程序文件所在目录的路径 + ''' + dqdirpath = os.getcwd() + return dqdirpath + +def get_zifu(path): + ''' + 获取对应文件中的中英文字符数量 + 返回为一个已经统计好字符的元组 + ''' + fp= open(path, 'r', encoding='utf-8')#获取文件指针 + t=fp.read()#读文件 + dic={}#创建字典 + s=jieba.lcut(t)#用jieba库对该文件进行精确分割 + for i in s:#遍历分割好的列表 + test_str = re.search(r"\W", i)#使用re库判断该字符是不是特殊字符 + if test_str==None:#如果分割出来的字符不是特殊字符 + if i in dic:#在原有的key中+1 + dic[i]+=1 + else:#新建一个key + dic[i]=1 + print("统计字符串成功!") + dic=sorted(dic.items(),key=lambda e:e[1],reverse=True) + print("对字符串出现次数降序排序统计成功!") + return dic +def writ_file(dic): + ''' + 将列表中的值写入result.txt文本中 + 传入值为列表 + 列表中嵌套一个有两个数的元组 + 将元组中的key以及value传入result.txt文件 + 传入时候key应为中文或英文词汇,value为一个整数表示在文本中出现次数 + 写入时第一列为单词以及中文词汇,第二列为出现次数 + ''' + path="result"+str(now)+".txt" + fp=open(path,"w",encoding='utf-8')#打开文件 + for key,value in dic:#遍历元组 + s=str(key)+"\t"+str(value) + fp.write(str(s)+'\n')#写入数据 + print("写入成功!") + fp.close() +def ciyun(path): + mas = np.array(Image.open("D:\\pytest\\xt\\qs.png")) + fp= open(path, 'r', encoding='utf-8')#获取文件指针 + s=fp.read() + fp.close() + li=jieba.lcut(s) + tx=" ".join(li) + w=wordcloud.WordCloud(font_path="msyhbd.ttc", + width=2000, + height=1700, + mask=mas, + background_color="white" + ) + w.generate(tx) + s="第"+str(now)+"次生成的词云"+".png" + w.to_file(s) + img=Image.open(s) + img.show()#展示词云 +if __name__ == '__main__': + while True: + now+=1 + Diretory_name=get_fileDiretory()#获取当前程序所在目录名 + file_name=show_files(Diretory_name)#查找目录下的所有文本并选择一个文本文件 + li=get_zifu(file_name)#获取文件中的字符出现次数并且统计 + writ_file(li)#将结果写入result.txt文档 + ciyun(file_name) + print("是否要继续统计?(Y/N)") + f=0 + while True: + s = input() + if s=='Y' or s=='y': + f=0 + break + elif s=='N' or s=='n': + f=1 + break + else: + print("输入字符无效请重新输入") + if f==1: + print("感谢您的使用,再见") + break + + +