title,year
与凤行,2024
风吹半夏,2022
谁是凶手,2021
楚乔传,2017
花千骨,2015
理论上讲,文件是对任何读写设备的抽象。 读写设备有很多,主要就是硬盘和网卡。
说到类型,主要指的是两种:二进制文件和文本文件。
不论是二进制文件还是文本文件,都有一定的格式。通常情况下,文件名的最后一个 . 后面的字符表示其格式,这部分被称为“扩展名”。
文件格式和扩展名并不是一回事
.txt 一样可以用 PS 打开。.txt 并不会影响文件的格式; JPG 图片的后缀修改成 .ai 并不代表它就变成了 Adobe Illustrator 文件。.jpg .jpeg。几乎任何文件读写操作都要遵循以下几个步骤:
r w a 表示。Python 中自带纯文本文件的读写函数 open() ,用于打开文件。
然而,这样就需要手动关闭文件。所以通常不这样做,而是使用 with 关键字让 Python 自动关闭。
print 就可以用来写入文件,参数 file 就可以指定输出位置。如果不指定,就是标准输出,一般情况下是控制台。
生成的文件如下:
赵丽颖参演过的电视剧:
- 《与凤行》(2024年)
- 《风吹半夏》(2022年)
- 《谁是凶手》(2021年)
- 《楚乔传》(2017年)
- 《花千骨》(2015年)
其实上述文件就已经是逗号分隔值文件,只是我们是按照纯文本文件的方式读取的。 Python 提供了一个读写 CSV 文件的包 csv。
CSV 文件格式
CSV 格式没有明文规定的规范,但是有一定的通用规范。大致上:
, (分隔符),字段值用 "" 包裹包 csv 提供了两种读取数据的方法,一种将每行解析为列表,另一种将每行解析为字典。
不论是哪种读取方法,都需要打开文件并创建一个“读取器”。
import csv
with open("./assets/demo.txt", newline='') as fin:
reader = csv.reader(fin)
for row in reader:
print(f"- 《{row[0]}》({row[1]}年)")
with open("./assets/demo.txt", newline='') as fin:
reader = csv.DictReader(fin)
for row in reader:
print("* 《{title}》({year}年)".format_map(row))- 《title》(year年)
- 《与凤行》(2024年)
- 《风吹半夏》(2022年)
- 《谁是凶手》(2021年)
- 《楚乔传》(2017年)
- 《花千骨》(2015年)
* 《与凤行》(2024年)
* 《风吹半夏》(2022年)
* 《谁是凶手》(2021年)
* 《楚乔传》(2017年)
* 《花千骨》(2015年)
写文件的方法也是类似的,需要创建一个写入器。这里就以字典式为例。
Python 自带的 csv 包只提供了比较基础的操作 CSV 文件的功能,主要是文本处理的功能。 但是第三方的 Pandas 包提供了更强大的功能,包括解析、筛选、变换、聚合等。
JSON 全称是“JavaScript 对象表示法”,但往往与 Python 原生类型对应(虽然不是一一对应)。
{
"actor": "赵丽颖",
"tv": [
{"title": "与凤行", "year": 2024, "collabrators": ["林更新"]},
{"title": "风吹半夏", "year": 2022, "collabrators": ["欧豪", "李光洁"]},
{"title": "谁是凶手", "year": 2021, "collabrators": ["肖央", "董子健"]},
{"title": "楚乔传", "year": 2017, "collabrators": ["林更新"]},
{"title": "花千骨", "year": 2015, "collabrators": ["霍建华"]}
]
}JSON 格式在网页和网络请求中的使用非常普遍,几乎所有现代网络编程接口(API)都是以 JSON 格式传递数据的。 因此该格式非常重要。
在 CSV 文件和纯文本文件中,我们主要使用的是读取器,通过不断读取文件内容执行操作。 但 JSON 格式的文件通常不是一行一行地读取的,而是整个进行解析的。 因此,需要首先读取文件全部内容,再按照 JSON 格式解析。 可见,我们主要需要使用 JSON 解析器(Parser),而至于解析的对象是文件还是字符串就不是很重要了。
反之也一样,通常 CSV 文件是一行一行写入的,但 JSON 文件需要整个写入,否则格式就出错了。 因此需要生成全部文件内容,再全部写到文件中,这里需要的就是 JSON 格式字符串的“生成器”,也叫“序列化器”(Serializer)。
Python 提供了包 json 用于解析和生成 JSON 字符日,但提供了直接操作文件的功能。
使用 load() 函数直接解析 JSON 文件。
{'actor': '赵丽颖', 'tv': [{'title': '与凤行', 'year': 2024, 'collabrators': ['林更新']}, {'title': '风吹半夏', 'year': 2022, 'collabrators': ['欧豪', '李光洁']}, {'title': '谁是凶手', 'year': 2021, 'collabrators': ['肖央', '董子健']}, {'title': '楚乔传', 'year': 2017, 'collabrators': ['林更新']}, {'title': '花千骨', 'year': 2015, 'collabrators': ['霍建华']}]}
也可以先读取文件为字符串再使用 loads() 解析。
{'actor': '赵丽颖',
'tv': [{'title': '与凤行', 'year': 2024, 'collabrators': ['林更新']},
{'title': '风吹半夏', 'year': 2022, 'collabrators': ['欧豪', '李光洁']},
{'title': '谁是凶手', 'year': 2021, 'collabrators': ['肖央', '董子健']},
{'title': '楚乔传', 'year': 2017, 'collabrators': ['林更新']},
{'title': '花千骨', 'year': 2015, 'collabrators': ['霍建华']}]}
dump() 和 dumps() 分别用于生成 JSON 文件和字符串。
也可以生成具有一定缩进格式的字符串
注释和注解