字典与文件操作全解析

一、字典

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

相关推荐
YM52e4 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙
西安老张(AIGC&ComfyUI)6 小时前
第034章:ComfyUI&AIGC一阶段学习总结及下阶段学习安排
学习·aigc
郭老二7 小时前
【Python】基本语法:装饰器语法糖@
python
_Jimmy_8 小时前
Agent常用检索器的详细介绍
python·langchain
小柯南敲键盘9 小时前
图片翻译API接入与自动化实现指南
运维·python·自动化
正经人_x9 小时前
学习日记43:FINO
学习
旅僧9 小时前
Q-learning(自用)
python·机器学习
Python大数据分析@9 小时前
曝梁文锋称「一度不想维护C端用户,奈何赶不走」,DeepSeek真不需要C端用户吗?可能会有啥影响吗?
python
艾斯特_11 小时前
工作流与多Agent协作:LangGraph、MCP和A2A的应用分层
人工智能·python·ai
IT小盘11 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python