字典与文件操作全解析

一、字典

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()。

相关推荐
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
XiHongShi20163 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
爱吃苹果的日记本3 天前
离散数学第六课
学习·离散数学
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas