python7(文件,join方法,jieba,wordcloud词云绘制)

文件

文件类型

所有文件采用两种方式进行展示:文本文件,二进制文件。
文本文件:由单一特定编码组成的文件,如UTF-8编码。如txt文件,py文件。
二进制文件:直接由比特0和1组成,没有统一字符编码。如png文件,avi文件。

文件的打开和关闭

不对文件进行处理的时候,文件处于存储状态。
如果一个程序想处理一个文件,首先要使这个文件变成占用状态。
在占用状态中,一个程序可以唯一的,排他的,对文件进行相关的处理。

存储状态和占用状态之间通过文件的打开和关闭进行转换。
在这里插入图片描述
在这里插入图片描述

f=open("f.txt")         #将默认使用文本形式打开,和只读模式。不能向文件中写入任何信息。
f=open("f.txt",'rt')    # r是读模式,t是文本形式。同默认值。
f=open("f.txt",'w')     #默认文本形式打开,w是覆盖写模式
f=open("f.txt",'a+')    #追加写模式, +号意思是并且能够读取文件内容
f=open('f.txt','x')     #创建写模式
f=open('f.txt','b')    #二进制方式打开,只读模式
f=open('f.txt','wb')   #二进制形式打开,覆盖写模式
#文件关闭
f.close()

文件内容的读取

f.read(size)        #读入全部文件内容,返回一个字符串,可选参数size,给出size。会读入前size长度的信息。
f.readline(size)    #读入一行内容,如果给出参数,会读入该行前size长度的信息。
f.readlines(hint)   #读入文件所有行,以每行为元素形成列表,每一行是一个字符串,如果给出参数,读入前hint行。

举个栗子:

fo=open('C:\\Users\\这里是马赛克\\Desktop\\Untitled.txt','r')
for line in fo.readlines(): #一个列表,文本的每行是列表的一个元素。
#for line in fo:  #也可以直接使用 for line in fo:分行读入而不是像上面那样一次性读入
     print(line)
fo.close()

利用with语句

使用with语句可以让系统在文件操作完毕后自动关闭文件。而不必在操作完毕后去调用close方法。

with open('filename','打开模式',encoding=' ') as fo:
	fo.read()....
	进行读取或写入操作...

其中的encoding参数可以省略。

数据文件的写入

在这里插入图片描述
在这里插入图片描述

实例:利用文件绘制轨迹

map函数:将第一个参数的功能作用于第二个参数中的每一个元素。
第一个参数是一个函数的名字,第二个参数是一个迭代类型。
对一个列表或一个集合中的每一个元素都执行一次第一个参数所对应的函数。

def format_name(s):
    return s[0].upper()+s[1:].lower() #首字母大写,后续字母小写
#map函数返回的是一个map对象,需要list(map(fun,itor))来将映射之后的map对象转换成列表
print(list(map(format_name, ['adam', 'LISA', 'barT'])))
from turtle import*
title('自动轨迹绘制')         #设置标题
setup(800,600,0,0)
pencolor('red')
pensize(5)
#数据读取
datals=[]
#注意txt文件最后一行结尾不要敲回车,自带有一个\n,敲回车的话就有两个\n了
f=open('C:\\Users\\这里是马赛克\\Desktop\\轨迹.txt')
# print(f.readlines())              #返回一列表
for line in f:                                                          #字符串经split转列表
    line=line.replace("\n","")      #去掉换行符
    datals.append(list(map(eval,line.split(','))))
f.close()
#自动绘制
for i in range(len(datals)):
    pencolor(datals[i][3],datals[i][4],datals[i][5])	#R,G,B值
    fd(datals[i][0])    								#前进距离
    if datals[i][1]:									#判断左转还是右转,值为1代表右转。
        right(datals[i][2])								#转的角度			
    else:
        left(datals[i][2])
hideturtle()
done()

在这里插入图片描述
在这里插入图片描述

join方法

一维数据的表示

如果数据间有序,使用列表。
如果数据间无序,使用集合。也可以用for循环对集合进行遍历处理。

一维数据的写入处理

#join方法将序列中的元素(必须都是字符类型)以指定的字符连接生成一个新的字符串。
seq = ("r", "u", "n", "5", "o", "b") 		#元组类型
print('-'.join(seq))
print(''.join(seq))
print('_'.join(seq))
print(' '.join(seq))

在这里插入图片描述

#join方法将序列中的元素(必须都是字符类型)以指定的字符连接生成一个新的字符串。
ls=['中国','美国','日本']         #列表类型
print(' '.join(ls))
# f=open(fname,'w')
# f.write(' '.join(ls))           #join方法生成了一个字符串
# f.close()

在这里插入图片描述
通过join 和split 方法,可以完成一维数据的的读入,写入处理。

二维数据的表示

'''
二维列表:本身是一个列表,列表中的每一个元素也是列表。
'''
import random
#生成5个1~100之间的数
lst=[random.randint(1,100)for i in range(5)]
print(lst)

在这里插入图片描述

jieba库

import jieba
jieba.lcut(string)          # 返回一个列表
jieba.add_word(string)      # 向分词词典增加新词string

wordcloud库

可以根据文本中词语出现的频率等参数绘制词云。
绘制词云的形状,尺寸和颜色都可以设定。
关于安装

from wordcloud import WordCloud
w=WordCloud()
w.generate(text)/w.fit_words(dict)
w.to_file(图片保存路径)
# (有时候会用到)
from wordcloud import WordCloud,STOPWORDS
# 设置停用词
sw=set(STOPWORDS)
for cnstopword in open('停用词文件'):
	sw.add(cnstopword.strip())
import requests
from lxml import etree
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
import jieba
# 获取指定文本
url='http://www.gov.cn/guowuyuan/zfgzbg.htm'			# 这里爬的是 政府工作报告
header = {
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
    'Access-Control-Allow-Credentials': 'true',
    'Connection': 'keep-alive',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    # 'Referer':'https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E5%B0%8F%E7%A7%98'
}
r=requests.get(url,headers=header)
r.encoding='utf-8'
r_text=r.text
tree=etree.HTML(r_text)
essay=tree.xpath('//div[@id="conlun2_box_text"]//text()')
article=' '.join(essay)

#进行分词
dele = {'。','!','?','“','”','(',')',' ','》','《',',','\r','\n','\r\n','\t'}
words = jieba.lcut(article)
#词频统计
articleDict = {}
articleSet = set(words)-dele            # 去除标点符号

for w in articleSet:
    if len(w)>1:                        # 去除一个字的
        articleDict[w] = words.count(w)

mask_=np.array(Image.open('C:\\Users\\马赛克马赛克\\Desktop\\光头强.jpg'))
w=WordCloud(background_color='white',\
font_path='C:\Windows\Fonts\simkai.ttf'\
,mask=mask_\
# ,contour_width=1,contour_color='blue'\
   )
w.fit_words(articleDict)            #根据词频来生成的

#  根据图片的颜色对词云进行上色 (选用)
# imcolor=ImageColorGenerator(mask_)
# w.recolor(color_func=imcolor)

plt.imshow(w)
plt.axis('off')
plt.show()

选用的mask 遮罩图片 背景色一定要纯白 (#FFFFFF),可以先扣图,然后加一个纯白的图层。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值