【7】Python文件和数据格式化

文件的使用

文件的类型

文件是数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列
  • 文件是数据存储的一种形式
  • 文件展现形态:文本文件和二进制文件

文本文件 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更多参数,扩展词语能力
  • 特色词云:设计一款属于自己的特色词云风格
  • 更多文件:用更多文件练习词云生成
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 前文 在实际应用中我们经常经历把要处理的数据读入python程序中进行处理并输出的这一过程。 因此本章节主要解决的...
    井上皓阅读 3,384评论 0 1
  • 一、文件的使用 Python对文本文件和二进制文件都有统一的操作步骤,即“打开-操作-关闭” 操作文件的流程: 1...
    yanger4399阅读 666评论 0 1
  • 第4周-程序的控制结构 紧凑形式的二分支结构:<表达式1> if <条件> else <表达式2> 条件组合的三个...
    Ericoool阅读 2,112评论 0 1
  • 母亲啊,自我出生起边守护在我身边呢。 除去母亲今日的模样,我记得最深的是我幼年时期每日清晨睁开双眸便能看到母亲...
    Reticence阅读 696评论 0 2
  • 来回抖动均匀点撒好院子一圈,算是隔离疫情了。再去他家给害病的牲畜灌自己调配的草药汤,是山上的芍药根熬制的偏方,爸爸...
    441aa1184342阅读 148评论 0 0