python语言程序设计(MOOC 嵩天)第七章 学习笔记(0226)

第七章 文件和数据格式化

数据格式化:将一组数据按照一定规格和式样进行表示、储存、运算

7.1 文件的使用

7.1.1 文件的类型

文件是数据抽象的集合(辅助存储器上的数据序列)
文件的展示形态:文本文件、二进制文件
文件:由单一特定的编码组成(类似字符串)
文本:tf = open (“f.txt”,“rt”)
print(tf.readline())
tf.close
二进制:bf = open (“f.txt”,“rb”)
print(bf.readline())
bf.close

7.1.2 文件的打开和关闭

a.open(<文件名(路径)> , <打开方式 rt or rb//读或写>)
#在python中 \ 代表转义符,所以输入绝对路径时使用 \ or /
#也可以使用相对路径
#打开模式,见后
读文件:
a.read(size)
a.readline(size)
a.readlines(hint)
写文件:
a.write(s)
a.writelines(lines)
a.seek(offset)
a.close() #<变量名>.close

打开模式:
‘r’:只读(默认),若文件不存在则报错
‘w’:覆盖写模式,文件不存在则创建,已存在则覆盖
‘x’:创建写模式,文件不存在则创建,已存在则报错
‘a’:追加写模式,文件不存在则创建,已存在则在最后追加内容
‘b’:二进制
‘t’:文本(默认)
‘+’:在原功能上增加功能,同时读写

7.1.3 文件内容的读取:

< f >.read(size):读入全部的内容,如果给出参数size的值,则读取前size个字符
< f >.readline(size):读入一行内容,如果给出参数size的值,则读取该行的前size长度的字符
< f >.readlines(hint):读入文件所有行,如果给出参数size的值,则读入前hint行(每行作为一个元素,构成列表)
eg:
遍历全文本:方法一

fname = input("请输入要打开文件的名称:")
fo = open(fname,"r")
txt = fo.read()		#一次性读入,若文件过大过于耗费资源
#对全文本txt进行处理
fo.close()

遍历全文本:方法二

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() :
	#对 txt 进行处理
	print (line)
fo.close()

逐行遍历:方法二

fname = input("请输入要打开文件的名称:")
fo = open(fname,"r")
for line in fo :	#分行读入,逐行处理
	#对 txt 进行处理
	print (line)
fo.close()

7.1.4 数据的文件写入

< f >. write (s):向文件写入一个字符串或字节流
< f >. write lines(lines):将一个元素全为字符串的列表写入文件
#写入后各元素间没有逗号、引号
< f >. seek (offset):改变当前文件操作指针的位置
0 - 文件开头 1 - 当前位置 2 - 文件末尾

fo = open("output.txt","w+")
ls = ["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)	#关键操作,若无seek函数,输出为空
for line in fo:
	print (line)
fo.close()

7.2 自动轨迹绘制

根据脚本来绘制图形:
①定义数据文件格式(接口)
②编写程序,根据文件接口解析参数绘制图形
③编制数据文件
式样中数据文件的格式:每行6个数字

#AutoTraceDraw.py
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,list列表化,加到ls后面
# datals,一个列表,列表中的每个元素都是列表,脚本中的每一行数据为一个元素
#自动绘制
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]:    #如果i行的第1个数据为1则右转
        t.right(datals[i][2])
    else:
        t.left(datals[i][2])

7.3 一维数据的格式化及处理

一维数据:由对等关系的有序或无序数据构成,采用线性结构组织(列表、数组、集合等概念)
二维数据:由多个一维数据构成,是一维数据的组合形式
多维数据:由一维数据或二维数据在维度上扩展形成
高维数据:仅利用最基本的二元关系,展示数据间的复杂结构
操作周期:存储(存储格式)、表示(数据类型)、操作(操作方式)
(1)一维数据的表示
if 数据间有序:使用列表类型
if 数据间无序:使用集合类型
(2)一维数据的存储
空格分隔、逗号分隔、其他符号或符号组和进行分隔
(3)一维数据的处理
从文件中读入数据:

txt = open (fname).read()
ls = txt.split()	# split函数的参数最为关键
f.close()

将数据写入文件:

ls = ["列表内容"]
txt = open(fname,"w")
f.write(' ',join(ls))	# join函数前置的参数最为关键
f.close()

7.4 二维数据的格式化及处理

(1)二维数据的表示
使用二维列表:每个元素都是一个列表,代表表格中的一行或一列(使用两层for循环进行遍历)
(2)CSV格式与二维数据的储存
CSV:使用逗号分隔,国际上通用的一二维数据存储格式
#每行一个一维数据,采用逗号分隔,无空行
默认约定:
#如果某个元素缺失,保留逗号
#二维数据的表头可以作为数据存储,也可以另行存储
#逗号为英文半角,逗号与数据之间无需空格
一般索引习惯:
#ls是一个列表,一般来说 ls [ row ] [ clumn ] 先行后列
#一般来说,外层列表存储为行,即按行存
(3)二维数据的读入处理

fo = open(read)
ls = []
for line in fo:
	line = line.replace("/n","")
	ls = ls.append(line.split(","))		#ls是一个包含二维数据的二维列表
f.close()

(4)二维数据写入CSV文件

ls = [ [],[],[] ]		#ls是一个包含二维数据的列表
f = open(fname,"w")
for item in ls:
	f.write(",".join(item) + '/n')
f.close()

(5)遍历二维数据元素

ls = [ [],[],[] ]		#ls是一个包含二维数据的列表
for row in ls:
	for column in row:
		do...

7.5 wordcloud库的使用

#中英文词云差异:中文文本无法根据空格分词,应先用jieba分词
(1)定义
词云:将词语通过图形可视化的方式,进行直观、艺术地展示
wordcloud库把词云当作一个WordCloud对象
wordcloud.WordCloud():代表一个,文本对应的词云
#wordcloud可以根据文本中词语出现的频率等参数绘制词云
#词云的形状、尺寸、颜色都可以设定
(2)基本操作函数
w = wordcloud.WordCloud():
w.generate(txt):向WordCloud对象w中加载文本txt
w.to_file(filename):将词云输出为图像文件,jpg 或 png格式
(3)词云绘制步骤
配置对象参数、加载词云文本、输出词云文件
#以空格分隔单词、统计单词出现次数并过滤、根据统计配置字号、确定颜色环境尺寸
(4)配置对象参数
w = wordcloud.WordCloud(<参数>)
width:指定词云对象生成图片的宽度,默认400像素
height:指定词云对象生成图片的高度,默认200像素
min_font_size:指定词云中字体的最小字号,默认4号(只出现一次的单词)
max_font_size:指定词云中字体的最大字号,根据高度自动调节
font_step:指定词云中字体的步进间隔,默认为1
font_path:指定字体文件路径,默认为None
max_words:指定词云显示的最大单词数量
stop_words:指定词云的排除词列表,即不显示的单词列表
backgroud_color:指定词云图片的背景颜色,默认为黑色
mask:通过给定图片的文件格式指定词云形状,默认为长方形

from scipy.misc import imread
mk = imread("pic.png")
w = wordcloud.WordCloud( mask=mk )

(5)中文词云实例

import wordcloud
import jieba
txt = "bala bala"		#获得要处理的文本内容
w = wordcloud.WordCloud( width=1000,\
	font_path="msyh",height=700 )
w.generate(" ".join(jieba.lcut(txt)))
#使用jieba库中的lcut将txt中文本分词,保存入一个列表
#使用join函数用空格,将上述列表中的元素连接起来
#使用w.generate将文本输入词云对象w
w.to_file("pywcloud.png")

7.6 *工作报告词云

设计思路:
读取文件、分词整理;设置并输出词云;观察结果、迭代优化

#GovRptWordCloudV1.pv
import wordcloud
import jieba
from scipy.misc import imread
mask = imread("fivestar.png")
f = open("新时代中国特色*.txt","r",encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)		#获得要处理的文本内容
w = wordcloud.WordCloud( width=1000,\
	font_path="msyh",height=700,background_color="white",\
	max_words=15,mask=mask )
w.generate(txt)
w.to_file("grwordcloud.png")
python语言程序设计(MOOC 嵩天)第七章 学习笔记(0226)python语言程序设计(MOOC 嵩天)第七章 学习笔记(0226) 阿娇一定要好好学习 发布了10 篇原创文章 · 获赞 0 · 访问量 237 私信 关注
上一篇:6482. 【GDOI2020模拟02.22】代数几何(algebraic)


下一篇:6476. 【GDOI2020模拟02.19】A(范德蒙恒等式)