07. 文件和数据格式化
文件的使用
文件是数据的抽象和集合
- 文件是存储在辅助存储器上的数据序列
- 文件是数据存储的一种形式
- 文件展现形态:文本文件和二进制文件
文本文件 vs 二进制文件
- 文件文件和二进制文件只是文件的展示方式
- 本质上,所有文件都是二进制形式存储
- 形式上,所有文件采用两种方式展示
文本文件
文件是数据的抽象和集合
- 由单一特定编码组成的文件,如 UTF-8 编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于 txt 文件、py 文件等
二进制文件
文件是数据的抽象和集合
- 直接由比特 0 和 1 组成,没有统一字符编码
- 一般存在二进制 0 和 1 的组织结构,即文件格式
- 适用于例如:png 文件、mp4 文件等
文件的打开: open(<fileName>, <mode>)
fileName 的几种取值:
1 | "D:/PYE/f.txt" |
| 文件的打开模式 | 描述 |
|---|---|
| ‘r’ | 只读模式,默认值,如果文件不存在,返回 FileNotFoundError |
| ‘w’ | 覆盖写模式,文件不存在则创建,存在则覆盖 |
| ‘x’ | 创建写模式,文件不存在则创建,存在则返回 FileExistsError |
| ‘a’ | 追加写模式,文件不存在则创建,存在则在文件最后追加内容 |
| ‘b’ | 二进制文件模式 |
| ‘t’ | 文本文件模式(默认值) |
| ‘+’ | 与 r/w/x/a 一同使用,在原功能基础上同时增加读写功能 |
文件的关闭:<变量名>.close()
文件的读取:
1 | # 读入全部内容,如果给出参数,读入前 size 长度 |
1 | # 文件的全文本操作 |
文件的数据写入:
1 | # 向文件写入一个字符串或字节流 |
1 | # 改变当前文件操作指针的位置,offset 含义如下:0 – 文件开头; 1 – 当前位置; 2 – 文件结尾 |
1 | fo = open("output.txt","w+") |
插播: with 关键字
with 语句用于封装代码块的执行,由**上下文管理器(Context Manager)**控制进入和退出时的行为。
关键保证:无论代码块正常结束还是异常抛出,退出时的清理操作必定执行。
语法形式
1 | with expression as target: |
示例
1 | # 多上下文 |
一维数据的格式化和处理
一维数据
- 由对等关系的有序或无序数据构成,采用线性方式组织
- 对应列表、数组和集合等概念
二维数据
由多个一维数据构成,是一维数据的组合形式
表格是典型的二维数据。其中,表头是二维数据的一部分
多维数据
由一维或二维数据在新维度上扩展形成
高维数据
仅利用最基本的二元关系展示数据间的复杂结构


一维数据的表示
- 如果数据间有序:使用列表类型
- 如果数据间无序:使用集合类型
一维数据的存储
空格、逗号等其他分隔
1 | # 一维数据的写入处理 |
二维数据的格式化和处理
二维数据的表示
列表类型可以表达二维数据
- 使用两层 for 循环遍历每个元素
- 外层列表中每个元素可以对应一行,也可以对应一列
CSV 数据存储格式
CSV: Comma-Separated Values
-
国际通用的一二维数据存储格式,用 csv 扩展名结尾
-
每行一个一维数据,采用逗号分隔,无空行
-
Excel 软件可读入输出,一般编辑软件都可以产生
-
如果某个元素缺失,逗号仍要保留
-
二维数据的表头可以作为数据存储,也可以另行存储
-
逗号为英文半角逗号,逗号与数据之间无额外空格
按行存?按列存?
- 按行存或者按列存都可以,具体由程序决定
- 一般索引习惯:
ls[row][column],先行后列 - 根据一般习惯,外层列表每个元素是一行,按行存
1 | # 从 CSV 格式的文件中读入数据 |
使用 csv 库进行读写
如果要使用,需要先导入:import csv
- 两种主要对象:
csv.reader—— 读取 CSV → 返回行迭代器(每行是列表)csv.writer—— 写入 CSV → 接收可迭代数据
基础写入
1 | import csv |
从字典写入
1 | fieldnames = ['name', 'age'] |
基础读取
1 | import csv |
模块 wordcloud 库使用案例
政府工作报告词云
1 | import jieba |