字典与文件操作全解析

一、字典

1.1字典的核心概念

字典是键值对映射结构,通过唯一的 "键(key)" 快速查找对应的 "值(value)"(类比学校学号对应学生),是编程中存储关联数据的常用容器。

1.2字典的基础操作

1.创建字典

  • 创建一个空的字典. 使用 { } 表示字典.
  • 也可以在创建的同时指定初始值
  • 键值对之间使用 , 分割 键和值之间使用 : 分割 (冒号后面推荐加一个空格).
  • 使用 print 来打印字典内容
  • 为了代码更规范美观, 在创建字典的时候往往会把多个键值对, 分成多行来书写.

2.查找键与值

  • in判断键是否存在(返回布尔值);
  • 字典[key]获取对应值,键不存在会报KeyError

3.新增 / 修改元素

使用 [ ] 可以根据 key 来新增/修改 value.

  • 如果 key 不存在, 对取下标操作赋值, 即为新增键值对
  • 如果 key 已经存在, 对取下标操作赋值, 即为修改键值对的值.

4.删除元素

  • pop(key)根据键删除对应的键值对。

5.遍历与获取键值

  • 直接遍历字典 → 获取所有键;
  • keys()获取所有键(返回dict_keys类型);
  • values()获取所有值(返回dict_values类型);
  • items()获取所有键值对(返回dict_items类型,元素为元组)。

1.直接使用 for 循环能够获取到字典中的所有的 key, 进一步的就可以取出每个值了.

2.取出所有 key 和 value

  • 使用 keys 方法可以获取到字典中的所有的 key

3.使用 items 方法可以获取到字典中所有的键值对.

1.3合法的 key 类型

不是所有的类型都可以作为字典的 key. 字典本质上是一个 哈希表, 哈希表的 key 要求是 "可哈希的", 也就是可以计算出一个哈希值.

  • 可以使用 hash 函数计算某个对象的哈希值.
  • 但凡能够计算出哈希值的类型, 都可以作为字典的 key.

列表无法计算哈希值.

字典也无法计算哈希值

二、文件

1.文件的基础概念

文件是持久化存储数据的载体(内存数据断电丢失,文件存储在磁盘),常见类型包括文本文件、可执行文件等。文件路径用于定位文件:

  • 绝对路径 :从盘符开始(如D:/program/qq/Bin/QQ.exe);
  • 相对路径:以基准目录为参照,适合项目内文件操作。
  • 文本文件 (txt)
  • 可执行文件 (exe, dll)
  • 图片文件 (jpg, gif)
  • 视频文件 (mp4, mov)
  • office 文件 (.ppt, docx)
2.文件的核心操作

文件操作需遵循 "打开→读写→关闭" 流程,Python 通过open()函数实现:

操作 方法 / 方式 说明
打开文件 f = open(路径, 模式) 模式:r(读)、w(写,清空原内容)、a(追加写);打开失败抛FileNotFoundError
关闭文件 f.close() 必须及时关闭,否则可能超出程序同时打开文件的上限(抛OSError
写文件 f.write(内容) 需以w/a模式打开;w模式会清空原内容,a模式追加到末尾
读文件 f.read(字符数)/for line in f/f.readlines() r模式打开;readlines()返回每行内容组成的列表(含换行符\n

如果文件是多行文本, 可以使用 for 循环一次读取一行.

由于文件里每一行末尾都自带换行符, print 打印一行的时候又会默认加上一个换行符, 因此打印结果看起来之间存在空行. 使用 print(f'line = {line}', end='') 手动把 print 自带的换行符去掉.

3.中文编码问题

文件与 Python 代码的编码方式需匹配(常用 GBK、UTF-8),否则会出现乱码或UnicodeDecodeError

解决方法:打开文件时指定encoding参数(如open(..., encoding='utf8'))。

  • 如果此处的编码为 ANSI , 则表示 GBK 编码.
  • 如果此处为 UTF-8 , 则表示 UTF-8 编码.

此时修改打开文件的代码, 给 open 方法加上 encoding 参数, 显式的指定为和文本相同的字符集, 问题 即可解决.

彻底弄懂常见的7种中文字符编码

4.上下文管理器(with 语句)

with open(...) as f:自动管理文件关闭,避免忘记关闭的问题,代码执行完后会自动调用close()

相关推荐
liliwoliliwo1 天前
deim跑代码记录学习思路
学习
zzzzls~1 天前
Python 工程化: 用 Copier 打造“自我进化“的项目脚手架
开发语言·python·copier
韶博雅1 天前
emcc24ai
开发语言·数据库·python
XH华1 天前
数据结构第九章:树的学习(下)
数据结构·学习
He少年1 天前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
AI_Claude_code1 天前
ZLibrary访问困境方案四:利用Cloudflare Workers等边缘计算实现访问
javascript·人工智能·爬虫·python·网络爬虫·边缘计算·爬山算法
jedi-knight1 天前
AGI时代下的青年教师与学术民主化
人工智能·python·agi
迷藏4941 天前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4941 天前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链