python第七周学习笔记(文件和数据结构化)

(67) 2024-01-21 09:01:01

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。

(1)文件的使用

文本文件
--由单一特定编码组成的文件,如UTF-8编码
--由于存在编码,也被看成是存储着的长字符串
--适用于例如:.txt文件.py文件
二进制文件
--直接由比特0和1组成,没有统一的字符编码
--一般存在二进制0和1的组织结构即文件格式
--适用于例如:.png文件,avi文件等
#文本形式打开文件
tf=open("f.txt","rt")
print(tf.readline())
tf.close()
#二进制打开文件
tb=open("f.txt","rb")
print(tb.readline())
tb.close()
文件的打开:
<(1)变量名>=open(<(2)文件名>,<(3)打开模式>)
(1)文件句柄
(2)文件路径和名称(源文件同目录可省路径)
使用方法:
1."D:/PYE/f,txt"
2."D:\\PYE\\f.txt"
3."./PYE/f.txt"
4."f.txt"
(3)文本or二进制(读or写)
文件打开模式:
"r":只读模式,默认值,如果文件不存在,返回fileNotFoundError
"w":覆盖写模式,文件不存在则创建,存在则完全覆盖
"x":创建写模式,文件不存在则创建,存在则返回FileExistsErroe
"a":追加写模式,文件不存在则创建,存在则在文件最后追加内容
"b":二进制文件模式
"t":文本文件模式
"+":与r/w/x/a一同使用,在原功能基础上增加同时读写功能
文件的关闭:
<变量名>.close()
文件内容的读取:
<f>.read(size=-1):读取全部内容,如果给出参数读入前size长度
<f>.readline(size=-1):读入一行内容,如果给出参数,读入该行前size长度
<f>.readlines(hint=-1):读入文件所有行,以行为元素形成列表,如果给出参数,读入前hint行
数据文件的写入:
<f>.write(s):向文件写入一个字符串或字节流
<f>.writelines(lines):将一个元素全为字符串的列表写入文件
<f>.seek(offset):改变当前文件操作指针的位置,offset含义如下:
0--文件开头;1--当前位置;2--文件结尾

python第七周学习笔记(文件和数据结构化) (https://mushiming.com/)  第1张

(2)实例:自动轨迹绘制

数据接口定义(非常具有个性色彩)
(1)300,(2)0,(3)144,(4)1,0,0
   300,   1,   144,   0,1,0
(1)行进距离
(2)转向判断(0:左转,1:右转)
(3)转向角度
(4)RGB三个通道颜色
map(<函数名>,<序列>,..)
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。
注意,map不改变原list,而是返回一个新list。
理解方法思维
--自动化思维:数据和功能分离,数据驱动的自动运行
--接口化设计:格式化设计接口,清晰明了
--二维数据应用:应用维度组织数据,二维数据最常使用

代码实现:

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.rt(datals[i][2])
    else:
        t.lt(datals[i][2])

 (3)一维数据的格式化

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织
--对应列表,数组和集合等概念
二维数据:由多个一维数据构成,是一维数据的组合形式
--表格是典型的二维数据
--其中,表头是二维数据的一部分
多维数据:由一维或二维数据在新维度上扩展形成
高维数据:仅利用最基本的二元关系展示数据间的复杂结构
数据的操作周期
存储(存储格式)<->表示(数据类型)<->操作(操作方式)
一维数组的表示
如果数据间无序:使用集合类型
--集合类型可以表达一维无序数据
--for循环可以便利数据,进而对每个数据进行处理
一维数据的存储
(1)空格分隔
--使用一个或多个空格分隔进行存储,不换行
--缺点:数据中不能存在空格
(2)逗号分隔
--使用英文半角逗号分隔数据进行存储,不换行
--缺点:数据中不能有英文逗号
(3)其他方式
--使用其他符号或符号组和==组合分隔,建议采用特殊符号
--缺点:需要根据数据特点定义,通用性较差
一维数据的处理

 (1)从空格分隔的文件中读入数据

txt=open(fname).read()
ls=txt.split()
f.close()

(2)从特殊符号分隔的文件中读入数据

txt=open(fname).read()
ls=txt.split("$")
f.close()

(3)采用空格分隔方式将数据写入文件

ls=['中国','美国','日本']
f=open(fname,'w')
f.write(' '.join(ls))
f.close()

(4)采用特殊分隔方式将数据写入文件

ls=['中国','美国','日本']
f=open(fname,'w')
f.write('$'.join(ls))
f.close()

(4)二维数据的格式化

二维数据的表示
使用列表类型
--使用两层for循环遍历每个元素
--外层列表中每个元素可以对应一行,也可以对应一列
CSV:Comma-Separated Values
--国际通用的一二维数据存储格式,一般.csv扩展名
--每行一个一维数据,采用逗号分隔,无空行
--Excel和一般编辑软件都可以读入或另存为csv文件
--如果某个元素缺失,逗号仍要保留
--二位数据的表头可以作为数据存储,也可以另行存储
--逗号为英文半角逗号,逗号与数据之间无额外空格
二维数据的存储
--按行或则按列存都可以,具体由程序决定
--一般索引习惯:ls[row][column],先行后列
--根据一般习惯,外层列表每个元素是一行,按行存
二维数据的读入处理

 (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=[[1,2],[3,4],[5,6]]
for row in ls:
    for column in row:
        print(column)

(5)wordcloud库的使用

wordcloud库的使用
wordcloud库把词云当作一个WordCloud对象
--wordcloud.WordCloud()代表一个文本对应的词云
--可以根据文本中词语出现的频率等参数绘制词云
wordcloud库常用方法:
w.generate(txt):向WordCloud对象w中加载文本.txt
w.to_file(filename):将词云输出为图像文件,.png或.jpg格式
步骤:
(1)生成一个对象
(2)
(3)
内部所做的事:
(1)分隔:以空格分隔单词
(2)统计:单词出现次数冰过滤
(3)字体:根据统计配置字号
(4)布局:颜色环境尺寸
配置对象参数:
min_font_size:指定词云中字体的最小字号,默认为四号
max_font_size:指定词云中的最大字号,根据高度自动调节
font_step:指定词云中字体字号的步进间隔,默认为1
font_path:指定字体文件的路径,默认为None
max_words:指定词云显示的最大单词数量,默认为200
stop_words:指定词云的排除词列表,即不显示的单词列表
mask:指定词云形状,默认为长方形,需要引用imread()函数
background_color:指定词云图片的背景颜色,默认为黑色

(6)实例:政府工作报告词云

(1)常规矩形词云

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")

(2)不规则图形词云

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")

 

THE END

发表回复