文件和数据格式化
7.1 文件的使用
7.1.1文件的类型
文件是数据的抽象和集合
-
文件是存储在辅助存储器上的数据序列
-
文件是数据存储的一种形式
-
文件展现形态:文本文件和二进制文件
文本文件vs.二进制文件
-
文件文件和二进制文件只是文件的展示方式
-
本质上,所有文件都是二进制形式存储
-
形式上,所有文件采用两种方式展示
文本文件——文件是数据的抽象和集合
-
由单一特定编码组成的文件,如UTF-8编码
-
由于存在编码,也被看成是存储着的长字符串
-
适用于例如:.txt文件、.py文件等
二进制文件——文件是数据的抽象和集合
-
直接由比特0和1组成,没有统一字符编码
-
一般存在二进制0和1的组织结构,即文件格式
-
适用于例如:.png文件、.avi文件等
“中国是个伟大的国家”
- 文本形式
- 二进制形式
f.txt文件保存:“中国是个伟大的国家!”
7.1.2文件的打开和关闭
文件处理的步骤:打开-操作-关闭
文件的打开
文件路径
打开模式
文件的关闭
文件使用
7.1.3文件内容的读取
文件的全文本操作
遍历全文本:方法一
遍历全文本:方法二
逐行遍历文本:方法一
逐行遍历文件:方法二
7.1.4数据的文件写入
7.2 实例11:自动轨迹绘制
7.2.1"自动轨迹绘制"问题分析
自动轨迹绘制
-
需求:根据脚本来绘制图形?
-
不通过写代码而通过写数据绘制轨迹
-
数据脚本是自动化最重要的第一步
7.2.2“自动轨迹绘制”实例讲解
基本思路
-
步骤1:定义数据文件格式(接口)
-
步骤2∶编写程序,根据文件接口解析参数绘制图形
-
步骤3∶编制数据文件
数据接口定义
#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(","))))
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.rightt(datals[i][2])
else:
t.left(datals[i][2])
#数据文件 data.txt
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0
7.3 一维数据的格式化和处理
7.3.1数据组织的维度
从一个数据到一组数据
维度:一组数据的组织形式
一维数据
由对等关系的有序或无序数据构成,采用线性方式组织
3.1413,3.1398,3.1404,3.1401,3.1349,3.1376
- 对应列表、数组和集合等概念
二维数据
由多个一维数构成,是一维数据的组合形式
表格是典型的二维数据;其中,表头是二维数据的一部分
多维数据
由一维或二维数据在新维度上扩展形成
高维数据
仅利用最基本的二元关系展示数据间的复杂结构
数据的操作周期
存储<->表示<->操作
7.3.2一维数据的表示
如果数据间有序:使用列表类型
ls = [3.1398,3.1349,3.1376]
- 列表类型可以表达一维有序数据
- for循环可以遍历数据,进而对每个数据进行处理
如果数据间无序:使用集合类型
st = {3.1398,3.1349,3.1376}
- 集合类型可以表达一维无序数据
- for循环可以遍历数据,进而对每个数据进行处理
7.3.3一维数据的存储
存储方式一:空格分隔
中国 美国 日本 德国 法国 英国 意大利
-
使用一个或多个空格分隔进行存储,不换行
-
缺点:数据中不能存在空格
存储方式二:逗号分隔
中国,美国,日本,德国,法国,英国,意大利
-
使用英文半角逗号分隔数据进行存储,不换行
-
缺点:数据中不能有英文逗号
存储方式三:其他方式
中国
美国
美国
美国日本
德国
德国
德国法国
英国
英国
英国意大利
-
使用其他符号或符号组合分隔,建议采用特殊符号
-
缺点:需要根据数据特点定义,通用性较差
7.3.4一维数据的处理
存储<->表示
- 将存储的数据读入程序
- 将程序表示的数据写入文件
一维数据的读入处理
从空格分隔的文件中读入数据
中国 美国 日本 德国 法国 英国 意大利
从特殊符号分隔的文件中读入数据
中国 美国 美国 美国日本 德国 德国 德国法国 英国 英国 英国意大利
采用空格分隔方式将数据写入文件
采用特殊分隔方式将数据写入文件
7.4 二维数据的格式化和处理
7.4.1二维数据的表示
使用列表类型
- 列表可以表达二维数据
- 使用二维列表
[ [3.1398,3.1349,3.1376],[3.1413,3.1404,3.1401] ]
- 使用两层for循环遍历每个元素
- 外层列表中每个元素可以对应一行,也可以对应一列
数据维度是数据的组织形式
- 一维数据:列表和集合类型
[3.1398,3.1349,3.1376] 数据间有序
{3.1398,3.1349,3.1376} 数据间无序
- 二维数据:列表类型
[ [3.1398,3.1349,3.1376],[3.1413,3.1404,3.1401] ]
7.4.2CSV数据存储格式
CSV:Comma-Separated Values
-
国际通用的一二维数据存储格式,一般.csv扩展名
-
每行一个一维数据,采用逗号分隔,无空行
-
Excel和一般编辑软件都可以读入或另存为csv文件
-
如果某个元素缺失,逗号仍要保留
-
二维数据的表头可以作为数据存储,也可以另行存储
-
逗号为英文半角逗号,逗号与数据之间无额外空格
7.4.3二维数据的存储
-
按行存或者按列存都可以,具体由程序决定
-
一般索引习惯:
ls[row][column]
,先行后列 -
根据一般习惯,外层列表每个元素是一行,按行存
7.4.4二维数据的处理
二维数据的读入处理——从CSV格式的文件中读入数据
二维数据的写入处理——将数据写入CSV格式的文件
二维数据的逐一处理——采用二层循环
7.5 模块6:wordcloud库的使用
7.5.1wordcloud库基本介绍
wordcloud是优秀的词云展示第三方库
- 词云以词语为基本单元,更加直观和艺术地展示文本
wordcloud库的安装
(cmd命令行)pip install wordcloud
7.5.2wordcloud库使用说明
wordcloud库把词云当作一个WordCloud对象
- wordcloud.WordCloud0)代表一个文本对应的词云
- 可以根据文本中词语出现的频率等参数绘制词云
- 词云的绘制形状、尺寸和颜色都可以设定
wordcloud库常规方法——w = wordcloud.WordCloud()
- 以WordCloud对象为基础
- 配置参数、加载文本、输出文件
配置对象参数——w = wordcloud.WordCloud(<参数>)
wordcloud应用实例
7.6 实例12:政府工作报告词云
7.6.1“政府工作报告词云”问题分析
直观理解政策文件
-
需求:对于政府工作报告等政策文件,如何直观理解?
-
体会直观的价值:生成词云&优化词云
政府工作报告等文件 → 有效展示的词云
《决胜全面建成小康社会夺取新时代中国特色社会主义伟大胜利》
https://python123.io/resources/pye/新时代中国特色社会主义.txt
《中共中央国务院关于实施乡村振兴战略的意见》
https://python123.io/resources/pye/关于实施乡村振兴战略的意见.txt
7.6.2“政府工作报告词云”实例讲解
基本思路
-
步骤1:读取文件、分词整理
-
步骤2:设置并输出词云
-
步骤3:观察结果,优化迭代
常规矩形词云
#GovRptWordCloudv1.py
import jieba
import wordcloud
f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud( \
width = 1000, height = 700,\
background_color = "white",
font_path = "msyh.ttc"
)
w.generate(txt)
w.to_file("grwordcloud.png")
不规则图形词云
#GovRptWordCloudv2.py
import jieba
import wordcloud
from scipy.misc import imread
mask = imread("chinamap.jpg")
excludes = { }
f = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud(\
width = 1000, height = 700,\
background_color = "white",
font_path = "msyh.ttc", mask = mask
)
w.generate(txt)
w.to_file("grwordcloudm.png")
个人学习记录会持续更新,不喜勿碰,如有指导建议,欢迎评论区留言,谢谢!!!