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

前文


在实际应用中我们经常经历把要处理的数据读入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种基本的打开模式

7种基本的打开模式
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数据存储格式

注意:

        如果某个元素缺失,逗号仍要保留

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

        逗号为英文半角逗号,逗号与数据之间无额外空格

        如果数据本身有逗号,不同csv软件有约定


基本规则:

(1)纯文本格式,通过单一编码表示字符;

(2)以行为单位,开头不留空行,行之间没有空行;

(3)每行表示一个一维数据,多行表示二维数据;

(4)以逗号分隔每列数据,列数据为空也要保留逗号;

(5)可以包含或不包含列名,包含时列名放置在文件第一行。


c、处理

CSV文件的每一行是一维数据,可以使用Python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表。

从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()分别对应编码和解码功能。

Json库
举例

b.CSV和JSON格式相互转换

将CSV转换成JSON格式

将CSV转换成JSON格式  

将二维JSON格式数据转换成CSV格式

将二维JSON格式数据转换成CSV格式


C、PIL库的使用


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容