文件的使用
文件的类型
文件是数据的抽象和集合
- 文件是存储在辅助存储器上的数据序列
- 文件是数据存储的一种形式
- 文件展现形态:文本文件和二进制文件
文本文件 vs. 二进制文件
- 文本文件和二进制文件只是文件的展示方式
- 本质上,所有文件都是二进制形式存储
- 形式上,所有文件采用两种方式显示
文本文件:
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于例如:.txt文件,.py文件等
二进制文件:
- 直接由比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件,.avi文件等
文件的打开和关闭
文件处理的步骤:打开→操作→关闭
文件的打开
<变量名> = open(<文件名>, <打开模式>)
变量名:文件句柄
文件名
- 文件路径和名称,源文件同目录可省略路径
- 路径可以是绝对路径,如
"D:/PYE/f.txt"
或"D:\\PYE\\f.txt"
,也可以是相对路径,(.py在D:\下)"./PYE/f.txt"
打开模式:文本or二进制,读or写
文件的打开模式 | 描述 |
---|---|
'r' |
只读模式,默认值,若文件不存在,返回FileNotFoundError异常 |
'w' |
覆盖写模式,文件不存在则创建,存在则完全覆盖 |
'x' |
创建写模式,文件不存在则创建,存在则返回FileExistsError异常 |
'a' |
追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
'b' |
二进制文件格式 |
't' |
文本文件格式,默认值 |
'+' |
与r /w /x /a 一同使用,在原功能基础上增加同时读写功能 |
文件关闭
<变量名>.close()
变量名:打开时的文件句柄
文件内容的读取
操作方法 | 描述 |
---|---|
<f>.read(size = -1) |
读入全部内容,若给出size值,读入前size长度 |
<f>.readline(size = -1) |
读入一行内容,若给出size值,读入该行前size长度 |
<f>.readlines(hint = -1) |
读入所有行,以每行为元素形成列表,若给出size值,读入前hint行 |
文件的全文本操作
遍历全文本:方法一(一次全部读入处理)
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():
print(line)
fo.close()
方法二(分行读入,逐行处理)
fname = input("输入打开的文件名:")
fo = open(fname, 'r')
for line in fo:
print(line)
fo.close()
数据的文件写入
操作方法 | 描述 |
---|---|
<f>.write(s) |
向文件写入一个字符串或字节流 |
<f>.writelines(lines) |
将一个元素全为字符串的列表写入文件 |
<f>.seek(offset) |
改变当前文件操作指针位置;offset含义如下:0-文件开头;1-当前位置;2-文件结尾 |
fo = open('output.txt', 'w+')
ls = ['中国', '法国', '美国']
fo.writelines(ls)
fo.seek(0) #写入文件后光标在最后,要打印应将光标放在开头
for line in fo:
print(line)
fo.close()
输出结果
>>>
中国法国美国
实例11:自动轨迹绘制
- 需求:根据脚本来绘制图形
- 不是写代码而是写数据绘制轨迹
- 使用数据脚本
实例讲解
基本思路
- 步骤1:定义数据文件格式(接口)
- 步骤2:编写程序,根据文件接口解析参数绘制图像
- 步骤3:编制数据文件
数据接口定义:非常具有个人色彩
此处:
行进距离,转向判断(0-左转;1-右转),转向角度,RGB三个通道颜色
#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.right(datals[i][2])
else:
t.left(datals[i][2])
举一反三
理解方法思维
- 自动化思维:数据和功能分离,数据驱动的自动运行
- 接口化设计:格式化设计接口,清晰明了
- 二维数据应用:应用维度组织数据,二维数据最常用
应用问题的扩展
- 扩展接口设计,增加更多的控制接口
- 扩展功能设计,增加弧形等更多功能
- 扩展应用需求,发展自动轨迹绘制到动画绘制
一维数据的格式化和处理
数据组织的维度
从一个数据到一组数据
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织
- 对应列表、数组和集合等概念
二维数据:由多个一维数据构成,是一维数据的组合形式
- 表格是典型的二维数据
- 表头是二维数据的一部分
多维数据:由一维或二维数据在新维度上扩展形成
高维数据:仅利用最基本的二元关系展示数据间的复杂结构
- 键值对
数据的操作周期
存储 <->表示 <-> 操作
一维数据的表示
如果数据间有序:使用列表类型
- 列表类型可以表达一维有序数据
- for循环可以遍历数据,进而对每个数据进行处理
如果数据间无序:使用集合类型
- 集合类型可以表达一维无序数据
- for循环可以遍历数据,进而对每个数据进行处理
一维数据的存储
存储方式一:空格分隔
- 使用一个或多个空格分隔进行存储,不换行
- 缺点:数据中不能有空格
存储方式二:逗号分隔
- 使用英文半角逗号分隔数据进行存储,不换行
- 缺点:数据中不能有英文逗号
存储方式三:其它方式
- 使用其他符号或符号组合分隔数据进行存储,建议采用特殊符号
- 缺点:需要根据数据特点定义,通用性较差
一维数据的处理
存储 <-> 表示
从空格分隔的文件中读入数据
txt = open(fname).read()
ls = txt.split()
f.close()
从特殊符号(如:$)分隔的文件中读入数据
txt = open(fname).read()
ls = txt.split('$')
f.close()
采用空格分隔方式将数据写入文件
ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write(' '.join(ls))
f.close()
采用特殊符号(如:$)分隔方式将数据写入文件
ls = ['中国', '美国', '日本']
f = open(fname, 'w')
f.write('$'.join(ls))
f.close()
二维数据的格式化和处理
二维数据的表示
使用列表类型
- 列表类型可以表达二维数据
- 使用二维列表
- 使用两层for循环遍历每个元素
- 外层列表中每个元素可以对应一行,也可以对应一列
csv数据存储格式和二维数据的存储
CSV: Comma-Separated Values,即逗号分隔值
- 国际通用的一二维数据存储格式,一般.csv扩展名
- 每行一个一维数据,采用逗号分隔,无空行
- Excel和一般的编辑软件都可以读入或另存为.csv文件
- 如果某个元素缺失,逗号仍要保留
- 二维数据的表头可以作为数据存储,也可以另行存储
- 逗号为英文半角逗号,数据之外无空格
按行存?按列存?
- 都可以,具体由程序决定
- 一般索引习惯:
ls[row][column]
,先行后列
二维数据的处理
从csv格式的文件中读入数据
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 items in ls:
f.write(','.join(item) + '\n')
f.close()
遍历所有元素,采用二层循环
ls = [[], [], []] #二维列表
for row in ls:
for column in row:
print(column)
模块6:wordcloud库的使用
wordcloud库基本介绍
wordcloud库是优秀的词云展示第三方库
- 词云以词语为单位,更加直观和艺术地展示文本
安装:
cmd命令行
pip install wordcloud
wordcloud库使用说明
wordcloud库把词云当做一个WordCloud对象
-
wordcloud.WordCloud()
代表一个文本对应的词云 - 可以根据文本中词语出现的频率等参数绘制词云
- 绘制词云的形状、尺寸和颜色可以自定义
常规方法
w = wordcloud.WordCloud()
- 以WordCloud对象为基础
- 配置参数、加载文本、输出文件
方法 | 描述 |
---|---|
w.generate(txt) |
向WordCloud对象w中加载文本txt |
w.to_file(filename) |
将词云输出为图像文件,.png或.jpg格式 |
- 步骤1:配置对象参数
- 步骤2:加载词云文本
- 步骤3:输出词云文件
例如:
import wordcloud
c = wordcloud.WordCloud()
c.generate("wordcloud by Python")
c.to_file("pywordcloud.png")
过程:
- 分隔:以空格分隔单词
- 统计:单词出现次数并过滤
- 字体:根据统计配置字号
- 布局:颜色环境尺寸
配置对象参数
w = wordcloud.WordCloud(<参数>)
参数 | 描述 |
---|---|
width |
指定词云生成图片的宽度,默认400像素 |
height |
指定词云生成图片的高度,默认200像素 |
min_font_size |
指定词云中最小字号,默认4号 |
max_font_size |
指定词云中最大字号,默认根据高度自动调节 |
font_step |
指定词云中字号大小步进间隔,默认为1 |
font_path |
指定字体文件的路径,默认None |
max_words |
指定词云显示的最大单词数量,默认200 |
stop_words |
指定词云的排除词列表,即不显示的单词列表 |
mask |
指定词云形状,默认为长方形,需要引用imread() 函数 |
background_color |
指定词云图片背景颜色,默认为黑色 |
mask
的使用:
>>> from scipy.misc import imread
>>> mk = imread("pic.png")
>>> w = wordcloud.WordCloud(mask = mk)
中文文本需要使用jieba库
w.generate(' '.join(jieba.lcut(txt)))
实例12:政府工作报告词云
直观理解政策文件
- 需求:对于政府工作报告等政策文件,如何直观理解?
- 体会直观的价值:生成&优化词云
分析文件
《决胜全面建成小康社会 夺取新时代中国特色社会主义伟大胜利》(十九大报告,2017年10月18日,习近平)
《中共中央 国务院关于实施乡村振兴战略的意见》(2018一号文件,2018年1月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(font_path = 'msyh.ttc', width = 1000, height = 700, background_color = 'white')
w.generate(txt)
w.to_file('grwordcloud.png')
另一文件相同。
单词太多,可以设置最多单词数:
#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(font_path = 'msyh.ttc', width = 1000, height = 700, background_color = 'white', max_words = 15)
w.generate(txt)
w.to_file('grwordcloud.png')
生成更有形的词云
#GovRptWordCloudV1.py
import jieba
import wordcloud
from scipy.misc import imread
mask = imread("fivestart.png")
f = open("新时代中国特色社会主义.txt", "r", encoding = "utf-8")
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = ' '.join(ls)
w = wordcloud.WordCloud(font_path = 'msyh.ttc', mask = mask, width = 1000, height = 700, background_color = 'white')
w.generate(txt)
w.to_file('grwordcloud.png')
举一反三
扩展能力
- 了解wordcloud更多参数,扩展词语能力
- 特色词云:设计一款属于自己的特色词云风格
- 更多文件:用更多文件练习词云生成