news 2026/11/4 9:15:03

Python基础语法学习:字典与文件操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础语法学习:字典与文件操作

前面学到的列表和元组,本质上都是按照位置来找数据。

比如:

alist=['zhangsan',20,90]

想拿到90,需要知道它在下标2的位置。

但是很多实际场景不是这样。

例如:

学号 → 学生 姓名 → 成绩 账号 → 信息

我们真正关心的是“某个 key 对应什么 value”。

这种场景就特别适合使用字典。

而除了数据结构之外,程序运行时的数据默认保存在内存中。程序结束或者机器重启以后,内存中的数据就没了。

如果想把数据长期保存下来,就需要用到文件。

所以这一部分主要学习:

字典 文件 文件路径 文件读写 字符编码 with

一、字典是什么

Python 中的字典是一种保存键值对的数据结构。

所谓键值对,就是:

key → value

通过 key,可以快速找到对应的 value。

例如:

student={'id':1,'name':'zhangsan'}

这里:

id → 1 name → zhangsan

就是两个键值对。


二、创建字典

创建空字典:

student={}

或者:

student=dict()

也可以直接初始化:

student={'id':1,'name':'zhangsan'}

字典中:

key : value

中间使用冒号分隔,不同键值对之间使用逗号分隔。

实际写代码的时候,如果键值对比较多,可以分成多行:

student={'id':1,'name':'zhangsan','score':90,}

这样可读性更好。


三、查找key

判断一个 key 是否存在,可以使用:

'id'instudent

例如:

student={'id':1,'name':'zhangsan'}print('id'instudent)print('score'instudent)

结果分别是:

True False

四、通过key获取value

字典可以使用[]根据 key 获取对应的 value。

例如:

student={'id':1,'name':'zhangsan'}print(student['id'])print(student['name'])

输出:

1 zhangsan

这里的[]看起来和列表的下标访问很像,但本质不同。

列表里面:

alist[2]

这里的2是位置。

字典里面:

student['id']

这里的'id'是 key。

如果 key 不存在,会抛出异常。


五、给字典新增和修改元素

字典新增和修改元素都可以通过[]完成。

如果 key 原来不存在:

student['score']=90

就是新增。

如果 key 已经存在:

student['score']=100

就是修改原来的 value。

所以:

key 不存在 → 新增 key 已存在 → 修改

六、删除字典元素

可以使用pop()按照 key 删除:

student.pop('score')

这样整个:

'score' : 90

键值对都会被删除。


七、遍历字典

最简单的遍历方式:

forkeyinstudent:print(key,student[key])

这样拿到的是每个 key,然后再通过:

student[key]

找到 value。

例如:

student={'id':1,'name':'zhangsan','score':80}forkeyinstudent:print(key,student[key])

八、keys()、values()、items()

如果只想获取所有 key,可以使用:

student.keys()

得到一个dict_keys类型的对象。

如果只想获取所有 value:

student.values()

如果想同时获取 key 和 value:

student.items()

所以简单记:

keys() → 所有 key values() → 所有 value items() → 所有 key-value

九、什么类型可以当字典的key?

这个地方还是比较有意思的:

不是所有 Python 对象都能作为字典的 key。

字典本质上是哈希表,所以 key 必须是可哈希的。可以使用:

hash()

计算一个对象的哈希值。

例如:

hash(0)hash(3.14)hash('hello')hash(True)hash(())

这些类型都可以计算哈希值。

而列表不能:

hash([1,2,3])

因为列表是可修改的,不能作为字典的 key。字典本身也不能作为自己的 key。

这也正好对应前面学到的元组:

元组 → 不可变 → 可以作为 key 列表 → 可变 → 不能作为 key

十、字典什么时候最适合用?

只要数据关系比较明显地表现为:

key → value

就可以考虑字典。

比如:

student={'name':'zhangsan','score':90}

通过:

student['name']

直接找到对应的数据。

这和列表按照位置找元素的思路完全不同。


十一、文件是什么

程序中的变量一般保存在内存里。

但是内存有一个明显的问题:

程序结束或者主机重启之后,数据就会丢失。

如果希望数据长期保存,就需要放到硬盘等持久化存储中,也就是保存成文件。

我们平时电脑里的:

txt exe dll jpg gif mp4 ppt docx

这些都属于文件。

这里主要先学习最简单的:

文本文件。


十二、文件路径

电脑里的文件非常多,所以通常会使用目录来组织这些文件。

例如:

D:\program\qq\Bin\QQ.exe

这就是一个文件路径。

这里:

D:

表示盘符。

后面的:

program qq Bin

表示一级一级的目录。

Windows 下路径分隔符通常写:

\

也可以使用:

/

在代码中使用/往往更加方便。


十三、绝对路径和相对路径

例如:

D:\program\qq\Bin\QQ.exe

从盘符开始完整描述文件位置,这属于绝对路径。

相对路径则需要先确定一个基准目录,再从这个目录出发寻找目标文件。

刚开始接触文件操作的时候,绝对路径比较容易理解,但实际开发中相对路径也非常常见。


十四、打开文件

Python 使用:

open()

打开文件。

最基本的写法:

f=open('d:/test.txt','r')

这里第一个参数是文件路径。

第二个参数是打开模式。

常见的三个:

r → 读 w → 写 a → 追加写

如果打开成功,open()会返回一个文件对象,后面的读写操作都围绕这个对象展开。


十五、关闭文件

打开之后,用完一定要关闭:

f.close()

例如:

f=open('d:/test.txt','r')f.close()

程序能够同时打开的文件数量是有限制的。

如果一直打开文件却不关闭,最终可能达到文件数量上限并抛出异常。

虽然 Python 的垃圾回收机制可能会在文件对象销毁的时候自动关闭文件,但垃圾回收时间并不一定,所以平时写代码时不要依赖这个机制,还是应该养成主动关闭文件的习惯。


十六、写文件

写文件需要使用:

w

方式打开。

例如:

f=open('d:/test.txt','w')f.write('hello')f.close()

这样就可以把hello写入文件。

注意:

w模式打开成功后,会清空原来的文件内容。

所以:

open('test.txt','w')

一定要小心。


十七、追加写入

如果不想删除原来的内容,而是希望把新内容追加到文件末尾,可以使用:

f=open('d:/test.txt','a')f.write('world')f.close()

原来的内容不会被清空,新内容会放到后面。

所以:

w → 覆盖写 a → 追加写 r → 读

这三个模式一定要分清。


十八、读文件

读取文件要使用:

r

模式。

比如:

f=open('d:/test.txt','r')result=f.read(2)print(result)f.close()

read()可以读取指定数量的字符。

如果文件包含多行文本,也可以直接遍历文件对象:

f=open('d:/test.txt','r')forlineinf:print(line,end='')f.close()

这样就可以一行一行读取。


十九、为什么读取文件后会多空行?

这个问题刚开始读文本文件时很容易遇到。

因为文件中的每一行结尾通常已经存在:

\n

而print()默认自己还会再添加一个换行。

所以:

print(line)

看起来可能会多出空行。

可以写成:

print(line,end='')

取消print()自带的换行。


二十、readlines()

如果想一次性把文件内容全部读出来,可以使用:

f.readlines()

返回的是一个列表。

列表中的每一个元素对应文件中的一行。

例如:

f=open('d:/test.txt','r')lines=f.readlines()print(lines)f.close()

二十一、中文乱码和字符编码

如果文件里面有中文,读取文件的时候可能出现:

异常 乱码

这时候就涉及字符编码。

计算机本身只能保存二进制数据,所以文字需要通过编码方式转换成数字。

常见的中文编码方式有:

GBK UTF-8

一个非常重要的原则就是:

文件本身的编码方式,要和 Python 读取时使用的编码方式匹配。

如果文件是 UTF-8,可以显式写:

f=open('d:/test.txt','r',encoding='utf8')

这样就可以明确指定编码。


二十二、为什么会出现乱码?

假设文件实际使用的是:

UTF-8

但是程序却按照:

GBK

去解释里面的数据。

那么同一串二进制数据被不同的编码方式解释以后,就可能出现乱码甚至直接抛出异常。

所以以后碰到:

文件有中文 读取出错 打开显示乱码

第一时间就应该想到:

编码方式是不是不匹配。


二十三、with上下文管理器

每次:

open()

然后再:

close()

虽然没问题,但是很容易忘记关闭文件。

Python 提供了更加方便的方式:

with

例如:

withopen('d:/test.txt','r',encoding='utf8')asf:lines=f.readlines()print(lines)

当with代码块执行结束之后,文件会自动关闭。

所以以后处理文件时,这种写法会更加省心。


二十四、总结

这一部分主要掌握了两大块内容。

第一块是字典:

key value keys() values() items() in pop()

最核心的思想是:

通过 key 找 value

第二块是文件:

open() read() write() readlines() close() with

常用打开方式:

r → 读 w → 覆盖写 a → 追加写

还有一个很容易遇到的问题:

中文乱码

这时候需要考虑文件编码和读取时指定的编码是否一致。

现在把前面几部分连起来看,Python 的基础语法已经开始形成一个比较完整的体系:

变量 ↓ if / for / while ↓ 函数 ↓ list / tuple ↓ dict ↓ 文件

后面写程序的时候,不再只是进行简单的计算,而是可以把数据组织起来、封装逻辑,并把数据真正保存到文件中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 6:43:17

趣博思 AI|告别绘图内卷,论文配图原来可以这么轻松

写论文,很多人把大部分精力放在文字撰写上,却忽略了科研配图的重要性。不少同学都遇到过这样的困境:文字部分反复打磨,逻辑通顺,可一到绘图环节就处处碰壁。不会使用专业绘图软件,自学 Origin、Visio 耗时漫…

作者头像 李华
网站建设 2026/10/30 13:52:16

把论文写作拆成“流水线”:我用aigcbiye把一篇期刊论文的诞生过程做成了实验记录 | aigcbiye官网www.aigcbiye.com 微信公众号搜一搜 aigcbiye

aigcbiye官网 微信公众号搜一搜 aigcbiye 引言:一个困扰我很久的问题 做了三年论文写作科普,后台收到最多的提问从来不是“怎么写得漂亮”,而是“老师,我卡在第二步了”。 第一步是“我想写”,第二步是“从哪下笔”…

作者头像 李华
网站建设 2026/10/31 8:47:03

FastGPT智能体开发:FastGPT 模型配置说明与 TaoToken 统一 Key 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 13:32:43

ponytail插件:快速捕获与清空碎片信息的效率方法论

1. 从“ponytail”这个标题说起:它到底是什么第一次看到“ponytail”这个词,很多人脑子里蹦出来的画面是扎起来的马尾辫。但在技术圈和效率工具圈里,这个词最近被赋予了完全不同的含义。它指的是一类把零散信息、临时任务、灵感碎片快速“束”…

作者头像 李华
网站建设 2026/10/24 8:10:11

Genkit Skills工程化实践:从语义契约到GKE生产部署

1. 这不是“技能列表”,而是一套可执行、可验证、可迭代的工程化能力体系你搜“skills”时看到的满屏热词——Google Cloud、Gemini、Genkit、GKE、前端开发skills、superpower skills、gemini登录失败提示、claude agent skills深度拆解、codex写论文的skills、ski…

作者头像 李华