文章目录
- 文件
-
- 文件类型
- 文件的打开和关闭
- 文件内容的读取
- 利用with语句
- 数据文件的写入
- 实例:利用文件绘制轨迹
- 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),可以先扣图,然后加一个纯白的图层。