【Python入门】——文件读写 Jieba库分词 WordCloud库词云制图

1.文件和字符串格式化


1.1文件

文本文件

文件时数据的抽象和集合,由单一特定编码组成的文件,如UTF-8编码

二进制文件

直接由比特0和1组成,没有统一字符编码

文件处理的步骤:打开——操作——关闭

1. 打开

#<变量名> = open(<文件路径>,<打开模式>)
七种打开文件的模式
1.'r' #只读模式,如果文件不存在,返回FileNotFoundError,默认
2.'w' #覆盖写模式,文件不存在则创建,存在则完全覆盖
3.'x' #创建写模式,文件不存在则创建,存在则返回FileExistsError
4.'a' #追加写模式,文件不存在则创建,存在则在文件最后追加内容
5.'b' #二进制文件模式
6.'t' #文本文件模式,默认
7.'+' #与r/w/x/a一同使用,在原功能基础上增加同时读写功能
#文本形式只读模式打开文件
tf = open("f.txt","rt") #
print(tf.readline())
tf.close()

#二进制形式只读模式打开文件
bf = open("f.txt","rb")
print(bf.readline())
bf.close()
三个"读"方法
1.read(size) #每次读取整个文件size个字符 默认全部
2.readlines(hint) #一次读取前hint,然后将文件拆成多行,返回一个列表
3.readline()  #读取一行返回一行 

2.操作

# 遍历全文本的方法
#一、一次全部读入
fname = input("输入文件名称")
fo = open(fname,"r")
txt = fo.read()
#对全文txt进行处理
fo.close()

#二、利用loop每次读入一部分
fname = input("输入文件名称")
fo = open(fname,"r")
txt = fo.read(2)
while txt != "":
	#对txt进行处理
    txt = fo.read(2)
fo.close()

#逐行遍历
fname = input("输入文件名称")
fo = open(fname,"r")
for line in fo.readlines():
    print(line)
fo.close()

3.文件写入

<f>.write(s)   #向文件写入一个字符串或字节流
#例如   f.write("中国是一个伟大的国家")
<f>.writelines(lines) #将一个元素全为字符串的列表拼接后写入文件
#例如 ls = ["中国","法国","美国"]  f.writelines(ls)
<f>.seek(offset) #改变当前文件操作指针的位置offset 0-文件开头  1-当前位置  2 - 文件结尾
# 例如
fo = open("output_fo.txt","w+")
ls = ["中国","法国","美国"]
fo.writelines(ls) #写完文件 文件指针在结尾
fo.seek(0)  #要回到开头才可以打印
for line in fo: #按行输出
    print(line)
fo.close()

实例:自动轨迹绘制

#使用Turtle自动轨迹绘制
#数据接口格式:
#长度  左0右1 角度 RGB颜色
import turtle as t
t.title("自动轨迹绘制")
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)
#数据读取
datals = []  #建立数据列表
f = open("data.txt")
for line in f:
    line = line.replace("\n","")
    datals.append(list(map(eval,line.split(",")))) #map作用:文本依据','分隔后 每一个元素都使用eval操作
f.close()
#自动绘制
for i in range(len(datals)):
        t.pencolor(datals[i][3],datals[i][4],datals[i][5])
        t.fd(datals[i][0])
        if datals[i][1]:
            t.right(datals[i][2])
        else:
            t.left(datals[i][2])
t.done()

1.2数据格式化处理

#一维数据的写入处理 
ls = ['中国','美国','日本'] 
f = open(fname,'w')
f.writh('$'.join(ls))
f.close()
fname中的文件内容为:"中国$美国$日本" 

二维数据

CSV 用逗号分隔值(Comma-Separated Values) 数据转化的通用标准格式

用类vector<vector>方式

fo = open(fname)
ls = []
for line in fo:
    line = line.replace ("\n","")
    ls.append(line.split(","))
fo.close()

#将数据吸入CSV格式的文件
ls = [[],[],[]] #二位列表
f = open(fname,'w')
for item in ls:
    f.write(','.join(item) + '\n')
f.close()

2.Jieba库的使用


优秀的中文分词第三方库,CMD命令中输入:

pip nstall jieba

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxTFFvhF-1580974260137)(C:\Users\15428\AppData\Roaming\Typora\typora-user-images\image-20200204214510104.png)]

jieba分词有三种模式:

  1. 精确模式:把文本精确的切分开,不存在冗余单词
  2. 全模式:把文本中所有可能的词语都扫描出来,有冗余
  3. 搜索引擎模式:在精确模式基础上,对长词再次切分
#jieba.lcut(s)  精确模式,返回一个列表
#例如
jieba.lcut("中国是一个伟大的国家")
['中国','是','一个','伟大','的','国家']

#jieba.lcut(s,cut_all = True)  全模式,返回一个列表
#例如
jieba.lcut("中国是一个伟大的国家",cut_all = True)
['中国','国是','一个','伟大','的','国家']

#jieba.lcut_for_search(s)  搜索引擎模式,返回一个列表
#例如
jieba.lcut("中华人民共和国是伟大的",cut_all = True)
['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '国是', '伟大', '的']
jieba.add_word(w)  #向分词词典增加新词w

实例:文本词频统计

#人名最多统计
s = '''双儿 洪七公 赵敏 赵敏 逍遥子 鳌拜 殷天正 金轮法王 乔峰 杨过 洪七公 郭靖 
       杨逍 鳌拜 殷天正 段誉 杨逍 慕容复 阿紫 慕容复 郭芙 乔峰 令狐冲 郭芙 
       金轮法王 小龙女 杨过 慕容复 梅超风 李莫愁 洪七公 张无忌 梅超风 杨逍 
       鳌拜 岳不群 黄药师 黄蓉 段誉 金轮法王 忽必烈 忽必烈 张三丰 乔峰 乔峰 
       阿紫 乔峰 金轮法王 袁冠南 张无忌 郭襄 黄蓉 李莫愁 赵敏 赵敏 郭芙 张三丰 
       乔峰 赵敏 梅超风 双儿 鳌拜 陈家洛 袁冠南 郭芙 郭芙 杨逍 赵敏 金轮法王 
       忽必烈 慕容复 张三丰 赵敏 杨逍 令狐冲 黄药师 袁冠南 杨逍 完颜洪烈 殷天正 
       李莫愁 阿紫 逍遥子 乔峰 逍遥子 完颜洪烈 郭芙 杨逍 张无忌 杨过 慕容复 
       逍遥子 虚竹 双儿 乔峰 郭芙 黄蓉 李莫愁 陈家洛 杨过 忽必烈 鳌拜 王语嫣 
       洪七公 韦小宝 阿朱 梅超风 段誉 岳灵珊 完颜洪烈 乔峰 段誉 杨过 杨过 慕容复 
       黄蓉 杨过 阿紫 杨逍 张三丰 张三丰 赵敏 张三丰 杨逍 黄蓉 金轮法王 郭襄 
       张三丰 令狐冲 赵敏 郭芙 韦小宝 黄药师 阿紫 韦小宝 金轮法王 杨逍 令狐冲 阿紫 
       洪七公 袁冠南 双儿 郭靖 鳌拜 谢逊 阿紫 郭襄 梅超风 张无忌 段誉 忽必烈 
       完颜洪烈 双儿 逍遥子 谢逊 完颜洪烈 殷天正 金轮法王 张三丰 双儿 郭襄 阿朱 
       郭襄 双儿 李莫愁 郭襄 忽必烈 金轮法王 张无忌 鳌拜 忽必烈 郭襄 令狐冲 
       谢逊 梅超风 殷天正 段誉 袁冠南 张三丰 王语嫣 阿紫 谢逊 杨过 郭靖 黄蓉 
       双儿 灭绝师太 段誉 张无忌 陈家洛 黄蓉 鳌拜 黄药师 逍遥子 忽必烈 赵敏 
       逍遥子 完颜洪烈 金轮法王 双儿 鳌拜 洪七公 郭芙 郭襄 赵敏'''
d = {}
maxx  = -1
Str = "1"
names = s.split()
for i in names:
    d[i] = d.get(i,0)+1
    if d[i] > maxx:
        Str = i
        maxx = d[i]
print(Str)
#答案:赵敏

12.wordcloud库的使用

wordcloud是一个优秀的词云展示第三方库,命令如下:

pip install wordcloud

在这里插入图片描述

由于诸多原因,所以可能会安装失败

所以我找到了一个代替方案:https://blog.csdn.net/DCclient/article/details/89818315

wordcloud库的四个运行过程

  1. 分隔:以空格分隔单词
  2. 统计:单词出现次数并过滤 过滤掉1或2个字符的单词
  3. 字体:根据统计配置字号
  4. 布局:颜色环境尺寸
w = wordcloud.WordCloud()  #代表一个文本对应的词云
w.generate(tx) #向WordClound对象w中加载文本txt
w.to_file(filenmae) #将词云输出为图像文件,.png或.jpg格式
#参数配置
w = wordcloud.WordCloud(width=100) #设置宽度
w = wordcloud.WordCloud(height=100) #设置高度
w = wordcloud.WordCloud(min_font_size =10) #设置最小字号,默认4号
w = wordcloud.WordCloud(max_font_size =20) #设置最大字号,根据高度调节
w = wordcloud.WordCloud(font_step =2) #设置词云中字号步进间隔,默认为1
w = wordcloud.WordCloud(font_payh="msth.ttc") #设置词云中字体
w = wordcloud.WordCloud(max_words =20) #设置最大单词数量,默认200
w = wordcloud.WordCloud(stop_words ={"python"}) #设置不显示单词列表
from scipy.misc import imread
mk = imread("pic.png")  #引用imread() 设置形状
w = wordcloud.WordCloud(mask=mk) #指定词云形状,默认矩形

实例:政府工作报告词云

#新时代中国特色社会主义.py
#新时代中国特色社会主义.txt文件地址:https://www.python123.io/resources/pye/新时代中国特色社会主义.txt
import jieba as j
import wordcloud as wc
#分词
f = open("新时代中国特色社会主义.txt","r",encoding='utf-8')
txt = f.read()
f.close()
ls = j.lcut(txt)
txt = " ".join(ls)
w = wc.WordCloud(font_path="msyh.ttc",\
    width=1000,height=700,background_color="white",\
    )
w.generate(txt)
w.to_file("新时代中国.png")

在这里插入图片描述

发布了141 篇原创文章 · 获赞 71 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/sinat_40872274/article/details/104197006