前文
在实际应用中我们经常经历把要处理的数据读入python程序中进行处理并输出的这一过程。
因此本章节主要解决的就是如何进行这一过程,以及在此过程中相关的一系列问题。
在文章最后还会介绍一个PIL库,以用来进行图像存储、显示和处理。
以下是本章主要讲的内容:
1.文件的使用
对文本文件和二进制文件如何进行读入、处理以及写入。
2.维度维数据格式化和处理
对一维、二维、多维数据如何进行存储、表示以及处理。
3.PIL库的使用
目录
A、文件的使用
1.文件概述
2.文件的打开
3.文件的关闭
4.文件的读取
B、维度维数据格式化和处理
1.一维数据
a. 一维存储
b. 一维表示
c. 一维处理
1.二维数据
a. 一维存储a. 一维存储
b.CSV格式与二维数据存储
c. 二维处理
3.高维数据的格式化
a.Json库
b.CSV和JSON格式相互转换
C、PIL库的使用
正文
A、文件的使用
1.文件概述
文件是数据的集合和抽象(类似:函数是程序的集合和抽象)。
文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。
文件是数据存储的一种形式。
文件的展现形态:
文本文件
二进制文件
本质上,所有文件都是二进制形式存储
二进制文件和文本文件只是文件的展示方式,二者最主要区别在于是否有统一的字符编码。
文本文件一般由单一特定编码的字符组成,如UTF-8编码。-- 长字符串例如:.txt文件、.py文件
二进制文件直接由比特0和比特1组成,没有统一字符编码,文件内部数据的组织格式与文件用途有关。-- 字节流例如:.png文件、.avi文件
无论文件创建为文本文件或者二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,打开后的操作不同。
实例:理解文本文件和二进制文件的区别
第一种
字符串:“中国是个伟大的国家!”
第二种
#文本形式打开文件
textFile = open("7.1.txt","rt")
print(textFile.readline())
textFile.close()
文本形式: “中国是个伟大的国家!”
#二进制形式打开文件
binFile = open("7-1.txt","rb")
print(binFile.readline())
binFile.close()
二进制形式:
b'\xd6\xd0\xb9\xfa\xca\xc7\xb8\xf6\xce\xb0\xb4\xf3\xb5\xc4\xb9\xfa\xbc\xd2\xa3\xa1'
采用文本方式打开文件,文件经过编码形成字符串,打印出有含义的字符;
采用二进制方式打开文件,文件被解析为字节(byte)流。由于存在编码,字符串中的一个字符由2个字节表示。
2.文件的打开
Python对文本文件和二进制文件采用统一的操作步骤,即“打开-操作-关闭”。
Python通过解释器内置的open()函数打开一个文件,并实现该文件与一个程序变量的关联:
<变量名> = open(<文件名>, <打开模式>)
文件名:文件路径和名称,如果源文件同目录可省略路径。
打开模式:7种。文本or二进制;读or写
变量名:文件句柄
文件名:文件路径和名称。
例如:D:\PYE\7.1.txt
绝对路径:D:/PYE/7.1.txt
或者 D:\\PYE\\7.1.txt
相对路径: .\PYE\7.1.txt
或者 7.1.txt
open()函数提供7种基本的打开模式:
3.文件的关闭
Python使用解释器内置的close()函数关闭文件,释放文件的使用授权:
<变量名>.close()
提醒:
文件只打开,未使用close()进行关闭,程序运行过程中该文件始终打开。但是当程序退出,Python解释器将自动关闭该文件。
但是,尽量自己主动关闭文件。
4.文件的读取
根据打开方式不同可以对文件进行相应的读写操作,Python提供4个常用的文件内容读取方法。
遍历全文本:
方法一
fname = input("请输入要打开的文件: ")
fo = open(fname, "r")
txt = fo.read()
#对全文txt进行处理
fo.close()
四种打开方法
如果程序需要逐行处理文件内容,建议采用上述代码格式:
fo = open(fname,"r")
for line in fo:
fo.close()
5.文件的写入
Python提供3个与文件内容写入有关的方法。
注意:如果想要读出你写入的字符串,就需要把指针重新指向。
B、维度维数据格式化和处理
一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。对应于python中的列表、数组和集合等概念。
二维数据:也称表格数据,由多个一维数据构成,是一维数据的组合形式。由关联关系数据构成,采用表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。
高维数据:由一维或二维数据在新维度上扩展而成。例如:排行榜在时间维度的扩展。
1.一维数据
a.一维存储
一维数据是最简单的数据组织类型,有多种存储格式,常用特殊字符分隔:
1.用空格分隔
2.用逗号分隔
3.用其他符号或符号组合分隔
注意:推荐第三种,因为前两种不能存放含有空格和逗号的数据。
b.一维表示
如果数据间有序:使用列表类型
列表类型可以表达一维有序数据
for循环可以遍历数据,进而对每个数据进行处理
如果数据间无序:使用集合类型
集合类型可以表达一维无序数据
for循环可以遍历数据,进而对每个数据进行处理
c.一维处理
步骤:
1.把数据读入程序
2.利用程序处理数据
3.把处理后的数据写入文件
2.二维数据
a.二维表示
使用二维列表
使用两层for循环遍历每个元素
外层列表中每个元素可以对应一行,也可以对应一列
b.CSV格式与二维数据存储
逗号分割数值的存储格式叫做CSV格式
国际通用的一二维数据存储格式,一般.csv扩展名。在商业和科学上广泛应用,尤其应用在程序之间转移表格数据
每行一个一维数据,采用逗号分隔,无空行
Excel软件可读入输出,一般编辑软件都可以产生
注意:
如果某个元素缺失,逗号仍要保留
二维数据的表头可以作为数据存储,也可以另行存储
逗号为英文半角逗号,逗号与数据之间无额外空格
如果数据本身有逗号,不同csv软件有约定
基本规则:
(1)纯文本格式,通过单一编码表示字符;
(2)以行为单位,开头不留空行,行之间没有空行;
(3)每行表示一个一维数据,多行表示二维数据;
(4)以逗号分隔每列数据,列数据为空也要保留逗号;
(5)可以包含或不包含列名,包含时列名放置在文件第一行。
c、处理
CSV文件的每一行是一维数据,可以使用Python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表。
从CSV格式的文件中读入数据
需要注意,以split(",")方法从CSV文件中获得内容时,每行最后一个元素后面包含了一个换行符("\n")。对于数据的表达和使用来说,这个换行符是多余的,可以通过使用字符串的replace()方法将其去掉。
replace("\n","") #把"\n"换成""
split(",") #通过指定分隔符对字符串进行切片
format()方法的使用:https://blog.csdn.net/i_chaoren/article/details/77922939
二维数据的写入
实例:将其中数据读出,将数字部分计算百分比后输出到另一文件中。
3.高维数据的格式化
与一维二维数据不同,高维数据能展示数据间更为复杂的组织关系。为了保持灵活性,表示高维数据不采用任何结构形式,仅采用最基本的二元关系,即键值对。万维网是高维数据最成功的典型应用。
JSON格式可以对高维数据进行表达和存储。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和理解。JSON格式表达键值对<key, value>的基本格式如下,键值对都保存在双引号中:
"key" : "value"
当多个键值对放在一起时,JSON有如下一些约定:
数据保存在键值对中;
键值对之间由逗号分隔;
括号用于保存键值对数据组成的对象;
方括号用于保存键值对数据组成的数组。
a.Json库
引入Json模块:import json
json库主要包括两类函数:操作类函数和解析类函数
操作类函数主要完成外部JSON格式和程序内部数据类型之间的转换功能
解析类函数主要用于解析键值对内容。
dumps()和loads()分别对应编码和解码功能。
b.CSV和JSON格式相互转换
将CSV转换成JSON格式
将二维JSON格式数据转换成CSV格式