Python基础之文件和数据格式化

it2022-05-05  130

什么是格式化
字符串格式化:将字符串按照一定规格和式样进行规范 "{}{}{}".format 数据格式化:将一组数据按照一定规格和式样进行规范:表示、存储、运算等

文件的使用

文件的使用方式:打开-操作-关闭 文本文件&二进制文件,open( , )和.close() 文件内容的读取:.read() .readline() .readlines() 数据的文件写入:.write() .writelines() .seek()
文件的理解
--文件时数据的抽象和集合 --文件时存储在辅助存储器上的数据序列 --文件时数据存储的一种形式 --文件展现形态:文本文件和二进制文件 --文本文件和二进制文本文件只是文件的展示方式 --本质上,所有文件都是二进制形式存储 --形式上,所有文件采用两种方式展示
文本文件
--文件时数据的抽象和集合 --由单一特定编码组成的文件,如UTF-8编码 --由于存在编码,也被看成是存储着的长字符串 --适用于例如:.txt文件、.py文件
二进制文件
--文件时数据的抽象和集合 --直接由比特0和1组成,没有统一字符编码 --一般存在二进制0和1的组织结构,即文件格式 --适用于例如:.png文件、.avi文件
文本文件 vs. 二进制文件
"中国是个伟大的国家!" 文本形式:中国是个伟大的国家! 二进制形式:b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1' f.txt文件保存: "中国是个伟大的国家!" #文本形式打开文件 tf = open("f.txt","rt") print(tf.readline()) tf.close() >>> 中国是个伟大的国家! #二进制形式打开文件 bf = open("f.txt","rb") print(bf.readline()) bf.close() >>>b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
文件的打开关闭
文件处理的步骤:打开-操作-关闭 a.open( , ) a.close() 文件的存储状态 ------------文件的占用状态 读文件: a.read(size) a.readline(size) a.readlines(hint) 写文件: a.write(s) a.writelines(lines) a.seek(offset)
文件的打开
<变量名> = open(<文件名>,<打开模式>) 解析: 变量名--文件句柄 文件名--文件路径和名称(源文件同目录可省路径) 打开模式 -- 文本 or 二进制 读 or 写 其中文件路径,假设文件路径在 D:\PYE\f.txt 文件路径和名称 "D:/PYE/f.txt" "D:\\PYE\\f.txt"
打开模式
文件的打开模式 描述 'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError 'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖 ‘x’ 创建写模式,文件不存在则创建,存在则返回FileExistsError 'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容 'b' 二进制文件模式 't' 文本文件模式,默认值 '+' 与r/w/x/a一同使用,在原功能基础上增加同时读写功能 f = open("f.txt") #文本形式、只读模式、默认值 f = open("f.txt","rt") #文本形式、只读模式、同默认值 f = open("f.txt","w") #文本形式、覆盖写模式 f = open("f.txt","a+") #文本形式、追加写模式+读文件 f = open("f.txt","x") #文本形式,创建写模式 f = open("f.txt","b") #二进制形式、只读模式 f = open("f.txt","wb") #二进制形式、覆盖写模式
文件的关闭
<变量名>.close() 文件句柄 #文本形式打开文件 tf = open("f.txt","rt") print(tf.readline()) tf.close() #二进制形式打开文件 bf = open("f.txt","rb") print(bf.readline()) bf.close()
文件内容的读取
操作方法 描述 <f>.read(size=-1) 读入全部内容,如果给出参数,读入前size长度 <f>.readline(size=-1) 读入一行内容,如果给出参数,读入该行前size长度 <f>.readlines(hint=-1) 读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行 s = f.read(2) #中国 s = f.readline() #中国是一个伟大的国家! s = f.readlines() #['中国是一个伟大的国家!']
文件的全文本操作
遍历全文本:方法一 #一次读入,统一处理 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 – 文件结尾 >>>f.write("中国是一个伟大的国家!") >>>ls = ["中国", "法国", "美国"] >>>f.writelines(ls) 中国法国美国 >>>f.seek(0) #回到文件开头
数据文件的写入
fo.open("optput.txt","w+") ls = ["中国","法国","美国"] fo.writelines(ls) for line in fo: print(line) fo.close() >>> (没有任何输出) fo.open("optput.txt","w+") ls = ["中国","法国","美国"] fo.writelines(ls) fo.seek(0) for line in fo: print(line) fo.close() >>>中国法国美国

实例11: 自动轨迹绘制

"自动轨迹绘制"问题分析 --需求;根据脚本来绘制图形 --不通过写的代码而通过写数据绘制轨迹 --数据脚本是自动化最重要的第一步 基本思路 --步骤1:定义数据文件格式(接口) --步骤2:编写程序,根据文件接口解析参数绘制图形 --步骤3:编制数据文件 数据接口定义(非常具有个性色彩) 300,0,144,1,0,0 300,1,144,0,1,0 第一个数据:行进距离 第二个数字:转向判断 0:左转 1:右转 第三个数字:转向角度 四五六数字:RGB三个通道颜色 0-1之间的浮点数 #AutoTraceDraw.py import turtle as t t.title('自动轨迹绘制') t.setup(800, 600, 0, 0) t.pencolor("red") t.pensize(5) #读取文件 datals = [] f = open("D:\\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]) t.done() 理解方法思维 自动化思维:数据和功能分离,数据驱动的自动运行 接口化设计:格式化设计接口,清晰明了 二维数据应用:应用维度组织数据,二维数据最常用

一维数据的格式化和处理

数据的维度:一维、二维、多维、高维 一维数据的表示:列表类型(有序)和集合类型(无序) 一维数据的存储:空格分隔、逗号分隔、特殊符号分隔 一维数据的处理:字符串方法 .split() 和 .join()
数据组织的维度
一维数据:由对等关系的有序或无序的数据构成,采用线性方式组织 - 对应列表、数组和集合等概念 二维数据: 由多个一维数据构成,是一维数据的组合形式 表格是典型的二维数据 其中,表头是二维数据的一部分 多维数据:由一维或二维数据在新维度上扩展形成 高维数据:仅利用最基本的二元关系展示数据间的复杂结构
数据的操作周期
存储 <-> 表示 <-> 操作 数据存储-----------数据表示------------数据操作 存储格式 数据类型 操作方式
一维数据的表示
如果数据间有序:使用列表类型表示 --列表类型可以表达一维有序数据 --for循环可以遍历数据,进而对每个数据进行处理 如果数据间无序:使用集合类型表示 --集合类型可以表达一维无序数据 --for循环可以遍历数据,进而对每个数据进行处理
一维数据的存储
存储方式一:空格分隔 中国 美国 日本 德国 法国 英国 意大利 --使用一个或多个空格分隔进行存储,不换行 --- 缺点:数据中不能存在空格 存储方式二:逗号分隔 --中国,美国,日本,德国,法国,英国,意大利 --使用英文半角逗号分隔数据进行存储,不换行 缺点:数据中不能有英文逗号 存储方式三:其他方式 中国$美国$日本$德国$法国$英国$意大利 --使用其他符号或符号组合分隔,建议采用特殊符号 --缺点:需要根据数据特点定义,通用性较差
一维数据的处理
存储 <-> 表示 数据存储 ----- 数据表示 存储格式 ----- 数据类型 --将存储的数据读入程序 --将程序表示的数据写入文件 --从空格分隔的文件中读入数据 中国 美国 日本 德国 法国 英国 意大利 txt = open(fname),read ls = txt.split() f.close() >>> ls #['中国', '美国', '日本', '德国', '法国', '英国', '意大利'] --从特殊符号分隔的文件中读入数据 中国$美国$日本$德国$法国$英国$意大利 txt = open(fname).read() ls = txt.split("$") f.close() >>> ls #['中国', '美国', '日本', '德国', '法国', '英国', '意大利']
一维数据写入处理
--采用空格分隔方式将数据写入文件 ls = ["中国","美国","日本"] f = open(fname,'w') f.write(' '.join(ls)) f.close() --采用特殊分隔方式将数据写入文件 ls = ["中国","美国","日本"] f = open(fname, 'w') f.write('$'.join(ls)) f.close()

二维数据的格式化和处理

二维数据的表示:列表类型,其中每个元素也是一个列表 CSV格式:逗号分隔表示一维,按行分隔表示二维 二维数据的处理:for循环+.split()和.join()
二维数据表示
--列表类型可以表达二维数据 --使用二维列表(列表里面的元素还是列表) --使用两层for循环遍历每个元素 --外层列表中每个元素可以对应一行,也可以对应一列
一二维数据的Python表示
数据维度是数据的组织形式 --一维数据:列表和集合类型 [3.1398, 3.1349, 3.1376] 数据间有序 {3.1398, 3.1349, 3.1376} 数据间无序 --- 二维数据:列表类型 [ [3.1398, 3.1349, 3.1376],[3.1413, 3.1404, 3.1401] ]
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 item in ls: f.write(','.join(item) + '\n') f.close()
二维数据的逐一处理(采用二层循环)
ls = [[1,2], [3,4], [5,6]] #二维列表 for row in ls: for column in row: print(column)

模块6: wordcloud库的使用

wordcloud库基本介绍
wordcloud是优秀的词云展示第三方库 词云以词语为基本单位,更加直观和艺术地展示文本
wordcloud库的安装
(cmd命令行) pip install wordcloud
wordcloud库基本使用
wordcloud库把词云当作一个WordCloud对象 --wordcloud.WordCloud()代表一个文本对应的词云 --可以根据文本中词语出现的频率等参数绘制词云 --词云的绘制形状、尺寸和颜色都可以设定
wordcloud库常规方法
w = wordcloud.WordCloud() --以WordCloud对象为基 --配置参数、加载文本、输出文件 w = wordcloud.WordCloud() 方法 描述 w.generate(txt) 向WordCloud对象w中加载文本txt w.to_file(filename) 将词云输出为图像文件,.png或.jpg格式 >>>w.generate("Python and WordCloud") >>>w.to_file("outfile.png") import wordcloud c = wordcloud.WordCloud() #步骤1:配置对象参数 c.generate("wordcloud by Python") #步骤2:加载词云文本 c.to_file("pywordcloud.png") #步骤3:输出词云文件 文本 -----------到------------ 词云 1分隔:以空格分隔单词 2统计:单词出现次数并过滤 3字体:根据统计配置字号 4布局:颜色环境尺寸
配置对象参数
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 指定词云图片的背景颜色,默认为黑色 width>>>w=wordcloud.WordCloud(width=600) height>>>w=wordcloud.WordCloud(height=400) min_font_size>>>w=wordcloud.WordCloud(min_font_size=10) max_font_size>>>w=wordcloud.WordCloud(max_font_size=20) font_step>>>w=wordcloud.WordCloud(font_step=2) font_path>>>w=wordcloud.WordCloud(font_path="msyh.ttc") max_words>>>w=wordcloud.WordCloud(max_words=20) stop_words>>>w=wordcloud.WordCloud(stop_words={"Python"}) mask: >>>from scipy.misc import imread >>>mk=imread("pic.png") >>>w=wordcloud.WordCloud(mask=mk) background_color>>>w=wordcloud.WordCloud(background_color="white")
wordcloud应用实例
--以空格分隔单词 import wordcloud txt = "life is short, you need python" w = wordcloud.WordCloud( background_color = "white") w.generate(txt) w.to_file("pywcloud.png") --中文需要先分词并组成空格分隔字符串 import jieba import wordcloud txt = "程序设计语言是计算机能够理解和\ 识别用户操作意图的一种交互体系,它按照\ 特定规则组织计算机指令,使计算机能够自\ 动进行各种运算处理。" w = wordcloud.WordCloud( width=1000,\ font_path="msyh.ttc",height=700) w.generate(" ".join(jieba.lcut(txt))) ***** w.to_file("pywcloud.png")

实例12: 政府工作报告词云

"政府工作报告词云"问题分析
需求:对于政府工作报告等政策文件,如何直观理解? 体会直观的价值:生成词云 & 优化词云 政府工作报告等文件 有效展示的词云
政府工作报告词云 基本思路
步骤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", \ ) 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", \ ) w.generate(txt) w.to_file("grwordcloud.png")
"政府工作报告词云"实例讲解(下)
变成五角星形状的词云 #GovRptWordCloudv2.py import jieba import wordcloud from imageio import imread ###+ mask = imread("fivestar.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", \ ) ###+了mask = mask w.generate(txt) w.to_file("grwordcloud.png") #GovRptWordCloudv2.py import jieba import wordcloud from imageio import imread ###+ mask = imread("bitlogo.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", \ ) ###+了 mask = mask w.generate(txt) w.to_file("grwordcloud.png")

最新回复(0)