小奥的学习笔记

  • Home
  • Learning & Working
    • Speech Enhancement Notes
    • Programming language
    • Computer & DL
    • MOOC
  • Life
    • Life Time
    • Thinking & Comprehension
    • Volunteer
    • Plan
    • Travel
  • Footprints
  • GuestBook
  • About
    • About Me
    • 个人履历
    • 隐私策略
  1. 首页
  2. Study-notes
  3. Programming language
  4. Python
  5. 正文

Python语言程序设计(第7周)知识点整理

2018年5月7日 1630点热度 0人点赞 0条评论

第七周:文件和数据格式化

7.1 文件的使用

1.文件的类型

文件是数据的抽象和集合:文件是存储在辅助存储器上的数据序列;文件是数据存储的一种形式;文件展现形态有文本文件和二进制文件。最根本上是二进制文件。

(1)文本文件:由单一特定编码组成的文件,如UTF-8编码。由于存在文件,也被看成存储着的长字符串。

(2)二进制文件:文件直接由比特0和1组成,没有统一字符编码。一般存在二进制0和1的组织结构,即文件格式。

2.文件的打开和关闭

文件处理步骤:打开-操作-关闭。

在不打开文件的时候,文件处于存储状态。当我们需要对其进行操作的时候,要使文件处于占用状态,此时操作对文件具有独一的、排他的操作。处理完成后,需要将文件关闭。

python中常用的读文件函数为a.read(size)、a.readline(size)和a.readlines(hint);常用的写文件函数为a.write(s)、a.writelines(lines)和a.seek(offset)。

打开文件的方式:

<变量名>=open(<文件名>,<打开模式>)

文件名是指文件路径和名称,源文件如果同目录可以省略路径(路径中的斜杠使用反斜杠/或者双斜杠//)。文件路径的四种方式:1.绝对路径使用反斜杠;2.绝对路径使用双斜杠;3.若文件在程序文件所在目录的子目录中,可以使用例如./PYE/F.txt的方式;4.若是相同目录,可直接使用文件名。

打开模式:文本or二进制、读or写。如表1.1所示。

表1.1 打开模式

文件打开模式

描述

‘r’

只读模式,默认值,如果文件不存在,返回FileNotFoundError。

‘w’

覆盖模式,文件不存在则创建,否则完全覆盖。

‘x’

创建写模式,文件不存在则创建,存在则返回FileExistsError。

‘a’

追加写模式,文件不存在则创建,存在则在文件最后追加内容。

‘b’

二进制文件模式。

‘t’

文本文件模式,默认值。

‘+’

与r/w/x/a一同使用,在员工能基础上增加同时读写功能。

其它还可以参见:http://www.yushuai.me/2017/10/18/3494.html。该文章中部分内容摘录如下。

r只读,r+读写,不创建

w新建只写,w+新建读写,二者都会将文件内容清零

(以w方式打开,不能读出。w+可读写)

以a,a+的方式打开文件,附加方式打开

(a:附加写方式打开,不可读;a+:   附加读写方式打开)

以 'U' 标志打开文件, 所有的行分割符通过 Python 的输入方法(例#如 read*() ),返回时都会被替换为换行符\n. ('rU' 模式也支持 'rb' 选项) .

r和U要求文件必须存在

不可读的打开方式:w和a

若不存在会创建新文件的打开方式:a,a+,w,w+

文件关闭方式:

<变量名>.close()

3.文件内容的读取

表1.2 文件内容的读取

操作方法

描述

a.read(size)

读入全部内容,如果给出参数size,则只读入前size长度的内容。

a.readline(size)

读入一行内容,如果给出参数size,则只读出该行前size长度的内容。

a.readlines(hint)

读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行。

(1)文件的全文本操作

遍历全文本:方法一(一次性读入,不适合大文件)

fname = input("请输入要打开的文件名称:")
fo = open(fname,'r')
txt.fo.read()
#对全文操作
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')
txt.fo.read(2)
for line in fo.readlines():
       print(line)
fo.close()

方法二(分行读入,逐行处理)

fname = input("请输入要打开的文件名称:")
fo = open(fname,'r')
txt.fo.read(2)
for line in fo:
       print(line)
fo.close()

4.数据的文件写入

表1.3 数据的文件写入

操作方法

描述

a.write(s)

向文件写入一个字符串或字节流。

f.writelines(lines)

将一个元素全为字符串的列表写入文件(所有行被合并一起写入)。

f.seek(offset)

改变当前文件操作指针的位置,offset含义如下:0位文件开头;1位当前位置;2位文件结尾。

例如:

fo = open(fname,'w+')
ls=["中国","法国","美国"]
fo.writelines(ls)
for line in fo:
       print(line)
fo.close()

为什么没有任何输出呢?

fo = open(fname,'w+')
ls=["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo:
       print(line)
fo.close()

    必须将指针恢复到文件开头才能真正输出信息,否则指针一直在文件最后,所以无法输出文件中的信息。

7.2 实例11:自动轨迹绘制

基本思路:

步骤1:定义数据文件格式(接口)。

步骤2:编写程序,根据文件接口解析参数绘制图形;

步骤3:编制数据文件。

数据接口定义是可以随意的,每个人都可以有自己的定义方式。在这里,我们用一行数字代表一次操作:其中第一个数字代表行进距离,第二个代表转向判断(0左转,1右转),第三个数字代表绝对转向角度,第四、五、六个数字代表RGB三个通道颜色(0~1之间的浮点数)。

代码:

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 24 21:10:49 2018
 
@author: davidcheung
"""
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是将第一个参数里面函数的功能作用于第二个参数的每一个数值
    #自动控制
    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])

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

1.数据组织的维度

一维数据是由对等关系的有序或无序数据构成,采用线性方式组织。它对应列表、数组和集合等概念。

二维数据是由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据。

多维数据是由一位或二维数据在新维度上扩展而成。

高维数据是仅利用最基本的二元关系展示数据间的复杂结构,例如键值对。

数据的操作周期分为三个阶段:存储<->表示<->操作。

数据存储中我们关心存储格式;数据表示是程序表达的方式,我们关心数据类型;数据操作我们关心操作方式。

2.一维数据的表示

如果数据间有序,使用列表类型。for循环可以遍历数据,进而对每个数据进行处理。

如果数据间无序,使用集合类型。for循环可以遍历数据,进而对每个数据进行处理。

3.一维数据的存储

存储方式一:空格分隔。只用空格分隔,不换行。缺点是数据中不能存在空格。

存储方式二:逗号分隔。使用英文半角逗号分隔数据,不换行。缺点是数据中不能有英文逗号。

存储方式三:其他方式。利用特殊符号进行分隔,缺点是需要根据数据特点定义,通用性差。

4.一维数据的处理

这里的处理是指将存储于表示相互转换,包括:将存储的数据读入程序,将程序表示的数据写入文件。

将数据写入文件中,文件中内容采用空格分隔方式。代码如下:

fname = 'country.txt'
ls = ['中国','美国','日本']
f = open(fname,'w')
f.write(' '.join(ls))
#将join前面的字符块分隔放入join参数中的字符串
f.close()

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

1.二维数据的表示

    使用列表类型,是二维列表。这只是一种基础的。可以使用两层for循环遍历所有数据。外层列表中,每个元素可以对应一行,也可以对应一列。

2.CSV格式与二维数据的存储

CSV,即Comma-Separated Values,也就是用逗号分隔的值的意思。这是一种国际上通用的一二维数据存储格式,一般用.csv扩展名。它每行一个一维数据,采用逗号分隔,无空行。CSV是数据转换的通用标准格式。CSV有以下约定:

(1)如果某个元素缺失,逗号仍要保留。

(2)二维数据的表头可以作为数据存储,也可以另行存储。

(3)逗号是英文半角逗号,逗号与数据之间没有空格间隔。

(4)按行存和按列存均可,具体由程序决定。但是一般索引习惯:ls[row][column],即先行后列。

3.二维数据的处理

(1)从CSV格式的文件中读入数据

fo = open(fname)
ls = []
for line in fo:
    line = line.replace('\n','')
    ls.append(line.split(','))
fo.close()

(2)将数据存入CSV格式的文件中

ls=[[],[],[]]#二维列表
f = open(fname,'w')
for item in ls:
    f.write(','.join(item)+'\n')
f.close()

(3)二维数据的逐一处理

ls=[[],[],[]]#二维列表
for row in ls:
    for column in row:
        print(ls[row][column])

7.5 模块6:worldcloud库的安装和使用

1.wordcloud库的安装

输入命令:

pip install wordcloud

2.wordcloud使用

wordcloud库把词云当作一个WordCloud对象。即wordcloud.WordCloud()代表一个文本对应的词云,它可以根据文本中词语出现频率等参数绘制云。

它的常规方法:使用w=wordcloud.WordCloud()生成一个词云对象,以该对象为基础,配置参数、加载文本、输出对象。方法如表5.1所示。

表5.1 wordcloud库常规方法

方法

描述

w.generate(txt)

向WordCloud对象w中加载文本txt。

w.to_file(filename

将词云输出为图像文件,png或者jpg格式。

使用方法:

(1)配置对象参数。

(2)使用generate方法加载词云文本。

(3)输出词云文件。

示例代码如下:

import wordcloud
c = wordcloud.WordCloud()
c.generate("wordcloud by Python")
c.to_file("ceshi.png")

在这里面,代码做了哪些事情呢?首先,以空格分隔单词。然后统计单词出现次数并过滤。再然后根据统计配置字号。最后布局颜色环境尺寸。

wordcloud的配置对象参数格式如下:

w= wordcloud.WordCloud(<参数>)

其可配置参数如表5.2所示。

5.2 配置对象参数

参数

描述

width

指定词云对象生成图片的宽度,默认400像素。

height

指定词云对象生成图片的高度,默认200像素。

min_font_size

指定词云中字体的最小字号,默认4号。

max_font_size

指定词云中字体的最大字号,根据高度自动调节。

font_step

指定词云中字体字号的步进间隔,默认为1。

font_path

指定字体文件的路径,默认为None。

max_words

指定词云显示的最大单词数量,默认为200。

stop_words

指定词云的排除词列表,即不显示的单词列表。

mask

指定词云形状,默认为长方形,需要引进imread()函数。例如:

from scipy.misc import imread

mk = imread(“pic.png”)

w= wordcloud.WordCloud(mask=mk)

background_color

指定词云图片的背景颜色,默认为黑色。

例程:

import wordcloud
import jieba
txt = "百度,全球最大的中文搜索引擎、最大的中文网站。\
1999年底,身在美国硅谷的李彦宏看到了中国互联网及中文搜索\
引擎服务的巨大发展潜力,抱着技术改变世界的梦想,他毅然辞掉\
硅谷的高薪工作,携搜索引擎专利技术,于2000年1月1日\
在中关村创建了百度公司"
w = wordcloud.WordCloud(width = 1000,\
                        height = 700,font_path="msyh.ttc")
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("ceshi.png")

图片效果如图1所示。

1525674508224701.png 

图1

7.6 实例12:政府报告词云

代码如下:

import jieba
import wordcloud
f = open("2018年政府工作报告.txt", "r", encoding="utf-8")
 
t = f.read()
f.close()
ls = jieba.lcut(t)
 
txt = " ".join(ls)
w = wordcloud.WordCloud( \
    width = 700, height = 300,\
    background_color = "white",
    font_path = "msyh.ttc",max_words = 20   
    )
w.generate(txt)
w.to_file("grwordcloud.png")

结果图如2所示。

1525674525704663.png 

图2

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Python python学习
最后更新:2018年5月7日

davidcheung

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

搜索
欢迎关注我的个人公众号
最新 热点 随机
最新 热点 随机
DEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架 奥地利匈牙利九日游旅程 论文阅读之Study of the General Kalman Filter for Echo Cancellation 小奥看房之鸿荣源珈誉府 杭州往返旅途及西溪喜来登和万怡的体验报告 2022年的第一篇碎碎念
奥地利匈牙利九日游旅程论文阅读之Study of the General Kalman Filter for Echo CancellationDEEPFILTERNET:一种基于深度滤波的全频带音频低复杂度语音增强框架
Leetcode题目解析(191127):1&19&70&78&79&84 Levinson-Durbin(莱文森-杜宾)算法的实现 汉诺塔问题 vivo2020校招提前批开发笔试试题 关于个人博客域名修改的公告 分割线|新的学习
标签聚合
Python 鸟哥的linux私房菜 高中 Java linux leetcode python学习 算法 生活 学习
最近评论
davidcheung 发布于 5 个月前(02月09日) The problem has been fixed. May I ask if you can s...
tk88 发布于 5 个月前(02月07日) Hmm is anyone else having problems with the pictur...
cuicui 发布于 9 个月前(10月20日) :wink:
niming 发布于 10 个月前(09月19日) 同级校友,能刷到太巧了
davidcheung 发布于 2 年前(08月16日) 我得找一下我之前整理的word文档看一下,如果找到了我就更新一下这篇文章。
Nolan 发布于 2 年前(07月25日) 您的笔记非常有帮助。贴图不显示了,可以更新一下吗?
davidcheung 发布于 3 年前(06月19日) 到没有看webrtc的代码。现在主要在看我们公司的代码了。。。只是偶尔看一看webrtc的东西。。。
aobai 发布于 3 年前(03月13日) gain_change_hangover_ 应该是每三个block 只能够调整一次,这样保证每帧...
匿名 发布于 5 年前(12月30日) 烫
小奥 发布于 5 年前(12月12日) webRTC里面的NS本身我记得就是在C++里面呀

COPYRIGHT © 2025 小奥的学习笔记. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

陕ICP备19003234号-1

鲁公网安备37120202000100号