前面python的学习中我们已经学习了python的函数和列表元组相关的内容,接下来我们来学习剩下的python语法:字典和文件

        相关代码已经上传到作者的个人gitee:楼田莉子/Python 学习喜欢请点个赞谢谢

目录

字典

        创建字典

        查找key

        新增/修改元素

        删除元素

        遍历字典

        取出所有的key和value

        合法的key类型

文件

        什么是文件?

        文件路径

     绝对路径和相对路径       

1. 绝对路径 (Absolute Path)

2. 相对路径 (Relative Path)

如何表示:语法总结

        命令行应用

如何选择?

        文件操作

        打开文件

        关闭文件

        写文件

        读文件

                关于中文的处理

上下文管理器


字典

        字典是一种存储 键值对 的结构.

        啥是键值对? 这是计算机/生活中一个非常广泛使用的概念.

        把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值.

        python中字典的关系类似于C++中的键值对,类似于map、unordered_map

        python中字典有很多键值对,且键不能重复

        创建字典

        创建一个空的字典. 使用 { } 表示字典

a = { }
b = dict()
print(type(a))
print(type(b))

        结果为:

        也可以在创建的同时指定初始值

        键值对之间使用 , 分割, 键和值之间使用 : 分割. (冒号后面推荐加一个空格).

        使用 print 来打印字典内容

student={1:"张三",2:"李四",3:"王五"}
print(student)

        结果为:

        最后一个键值对, 后面可以写 , 也可以不写.

        查找key

        使用 in 可以判定 key 是否在 字典 中存在. 返回布尔值

#用in判定是否存在
#这里的“\”表示换行,删掉就会报错
student = \{'id': 1,'name': 'zhangsan',}
print('id' in student)
print('score' in student)

        结果为:

        使用 [ ] 通过类似于取下标的方式, 获取到元素的值. 只不过此处的 "下标" 是 key. (可能是整数, 也可能是字符串等其他类型).

#这里的“\”表示换行,删掉就会报错
student = \{'id': 1,'name': 'zhangsan',}
#用[]获取键值
print(student['id'])
print(student['name'])

        结果为:

        如果 key 在字典中不存在, 则会抛出异常.
 

#这里的“\”表示换行,删掉就会报错
student = \{'id': 1,'name': 'zhangsan',}
#如果不存在则抛异常
print(student['score'])

        新增/修改元素

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

        如果 key 不存在, 对取下标操作赋值, 即为新增键值对

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

        结果为:

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

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


        删除元素

        使用 pop 方法根据 key 删除对应的键值对

#删除元素
#使用 pop 方法根据 key 删除对应的键值对
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
student.pop('score')
print(student)

        遍历字典

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

#遍历字典元素
student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
for key in student:print(key, student[key])

        结果为:

        

        取出所有的key和value

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

student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
#取出所有key和value
print(student.keys())

        结果为:       

        此处 dict_keys 是一个特殊的类型, 专门用来表示字典的所有 key. 大部分元组支持的操作对于

dict_keys 同样适用.

        使用 values 方法可以获取到字典中的所有 value

student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
#取出所有key和value
print(student.values())

        此处 dict_values 也是一个特殊的类型, 和 dict_keys 类似.
 

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

student = {
'id': 1,
'name': 'zhangsan',
'score': 80
}
print(student.items())


        此处 dict_items 也是一个特殊的类型, 和 dict_keys 类似.
 

        合法的key类型

        类似于C++中的字典本质上是一个 哈希表, 哈希表的 key 要求是 "可哈希的", 也就是可以计算出一个哈希值.

        不是所有的类型都可以作为字典的 key.
        可以使用 hash 函数计算某个对象的哈希值.

        但凡能够计算出哈希值的类型, 都可以作为字典的 key.

#计算是否为合法key
print(hash(0))
print(hash(3.14))
print(hash('hello'))
print(hash(True))
print(hash(())) # ( ) 是一个空的元组

        以下结果表明均为合法的key类型

        列表无法计算哈希值.

        

print(hash([1, 2, 3]))

        字典也无法计算哈希值

print(hash({ 'id': 1 }))

文件

        什么是文件?

        变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失.要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在 文件 中保存.

        在 Windows "此电脑" 中, 看到的内容都是 文件.

        通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:文本文件 (txt)

        可执行文件 (exe, dll)图片文件 (jpg, gif)

        视频文件 (mp4, mov) office 文件 (.ppt, docx)

        ......

        而接下来我们将介绍最简单的文件格式

        文件路径

        一个机器上, 会存在很多文件, 为了让这些文件更方面的被组织, 往往会使用很多的 "文件夹"(也叫做目录)来整理文件.

        实际一个文件往往是放在一系列的目录结构之中的.

        为了方便确定一个文件所在的位置, 使用 文件路径 来进行描述.

        如以下的路径

D:\program\qq\Bin\QQ.exe 来表示.

    D: 表示 盘符. 不区分大小写.

        每一个 \ 表示一级目录. 当前 QQ.exe 就是放在 "D 盘下的 program 目录下的 qq 目录下的 Bin 目录中" .

        目录之间的分隔符, 可以使用 \ 也可以使用 / . 一般在编写代码的时候使用 / 更方便.

     绝对路径和相对路径       

  • 绝对路径:从“根目录”开始,描述文件位置的完整路径。它就像是一个文件在文件系统中的完整邮寄地址

  • 相对路径:从“当前所在目录”开始,描述文件位置的相对路径。它就像是在一个商场里,别人告诉你“我在你楼上的奶茶店”,这个指引依赖于你“当前的位置”。

1. 绝对路径 (Absolute Path)
  • 是什么:从根目录C:\ 或 /)开始,一层不落地写到目标文件。

  • 怎么表示

    • WindowsC:\Users\ming\Desktop\my_essay.docx

    • Mac/Linux/Users/ming/Desktop/my_essay.docx

  • 特点

    • 唯一性:这个文件的绝对路径在全宇宙只有这一个。

    • 绝对性无论你当前在哪个目录,只要你使用这个绝对路径,系统就一定能精准定位到它。

    • 开头:Windows通常以盘符(如C:\)开头;Mac/Linux以正斜杠(/)开头。

比喻:就像告诉别人你的完整地址:“中国北京市海淀区XX路XX号XX大厦10楼1001室”。无论这个人现在在世界的哪个角落,凭借这个地址都能找到你。

2. 相对路径 (Relative Path)
  • 是什么:从你当前所在的目录出发,如何找到目标文件。

  • 怎么表示(基于当前目录是 Desktop):

    • 目标文件就在当前目录下,直接写文件名:my_essay.docx

    • 想表示“当前目录”本身,可以用一个点:./my_essay.docx./ 代表“在这里”)

    • 想进入当前目录的子目录(这里Desktop没有子目录,所以用Downloads举例):如果当前在ming目录,去Downloads就是 Downloads/game.zip

    • 想返回上一级目录,用两个点:../../ 代表“上一层”)

      • 比如,你现在在Desktop,想找到Downloads里的game.zip,你需要先退回上一层(ming目录),再进入Downloads。路径就是:../Downloads/game.zip

  • 特点

    • 相对性:它的有效性严重依赖你当前的位置。如果你不在Desktop目录,那么my_essay.docx这个相对路径就失效了。

    • 简洁性:通常比绝对路径短得多,写起来更方便。

如何表示:语法总结

符号含义示例 (假设当前目录是 /Users/ming/Desktop)
绝对路径从根目录开始/Users/ming/Desktop/my_essay.docx
[文件名]当前目录下的文件my_essay.docx
./当前目录本身(通常可省略)./my_essay.docx (等价于 my_essay.docx)
../上一级目录../ 指向 /Users/ming/
../../上两级目录../../ 指向 /Users/
[文件夹名]/当前目录下的某个子文件夹(如果存在) Projects/my_app.py

        命令行应用

# 当前在 Desktop 目录
# 用绝对路径打开文件(无论在哪都能执行)
$ open /Users/ming/Desktop/my_essay.docx      # Mac
> start C:\Users\ming\Desktop\my_essay.docx   # Windows# 用相对路径打开文件(必须在Desktop目录或其父目录执行才有效)
$ open ./my_essay.docx    # Mac
$ open my_essay.docx      # 省略 ./
> start my_essay.docx     # Windows

        python中应用

# 使用绝对路径(更可靠)
file = open("/Users/ming/Desktop/my_essay.docx", "r")# 使用相对路径(假设程序运行时,当前目录就是Desktop)
file = open("my_essay.docx", "r")# 使用相对路径,从上一级目录的Downloads文件夹读取
file = open("../Downloads/game.zip", "rb")

如何选择?

  • 用绝对路径:当你需要确保万无一失的精准定位时,比如在脚本、程序配置或日志中记录文件位置。

  • 用相对路径:当你在项目内部移动或引用文件时,这样可以使整个项目更容易被移动或共享(因为路径不依赖于项目在电脑上的具体位置)。

        文件操作

        打开文件

        使用内建函数 open 打开一个文件.

f=open('D:\Python\python---learning\hello world.txt','r')


        第一个参数是一个字符串, 表示要打开的文件路径

        第二个参数是一个字符串, 表示打开方式. 其中 r 表示按照读方式打开. w 表示按照写方式打开. a表示追加写方式打开.

        如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.

        如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常

        关闭文件

        使用 close 方法关闭已经打开的文件

f.close()


        使用完一定要关闭文件!

        如果一直循环的打开文件, 而不去关闭的话, 就会出现下述报错.

        当一个程序打开的文件个数超过上限, 就会抛出异常.

        注意: 上述代码中, 使用一个列表来保存了所有的文件对象. 如果不进行保存, 那么 Python 内置的垃圾回收机制, 会在文件对象销毁的时候自动关闭文件.

        但是由于垃圾回收操作不一定及时, 所以我们写代码仍然要考虑手动关闭, 尽量避免依赖自动关闭

        写文件

        文件打开之后, 就可以写文件了.

        写文件, 要使用写方式打开, open 第二个参数设为 'w'

        使用 write 方法写入文件.

f = open(r'D:/Python/python---learning/hello world.txt', 'w')
f.write('诗华')
f.close()

        如果是使用 'r' 方式打开文件, 则写入时会抛出异常.
        使用’w‘方式打开文件成功会清除原有数据

        使用’a‘实现“追加写”,原有内容不变,直接在后面家内容

f = open(r'D:/Python/python---learning/hello world.txt', 'a')
f.write('诗华')
f.close()
f = open(r'D:/Python/python---learning/hello world.txt', 'w')
f.write('诗华')
f.close()

        针对已经关闭的文件对象进行写操作, 也会抛出异常.
 

        读文件

        读文件需要使用’r‘的方式打开文件

        使用read方法完成“读”操作,参数为几个字符

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

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

f = open('d:/test.txt', 'r')
for line in f:print(f'line = {line}')
f.close()

        注意:print()函数默认带换行符

        使用 print(f'line = {line}', end='') 手动把 print 自带的换行符去掉.

        

        使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行.

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

        此处的 \n 即为换行符.

        
        关于中文的处理

        当文件内容存在中文的时候, 读取文件内容不一定就顺利.同样上述代码, 有的同学执行时可能会出现异常,有的则会出现乱码、

        计算机表示中文的时候, 会采取一定的编码方式, 我们称为 "字符集"

        所谓 "编码方式" , 本质上就是使用数字表示汉字.

        我们知道, 计算机只能表示二进制数据. 要想表示英文字母, 或者汉字, 或者其他文字符号, 就都要通过编码.

        最简单的字符编码就是 ascii. 使用一个简单的整数就可以表示英文字母和阿拉伯数字.

        但是要想表示汉字, 就需要一个更大的码表.

        一般常用的汉字编码方式, 主要是 GBK 和 UTF-8

        必须要保证文件本身的编码方式, 和 Python 代码中读取文件使用的编码方式匹配, 才能避免出现上述问题.

        Python3 中默认打开文件的字符集跟随系统, 而 Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.

        如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题

        用记事本打开文本文件, 在 "菜单栏" -> "文件" -> "另存为" 窗口中, 可以看到当前文件的编码方式

        如果此时为ASNI,表示GBK编码

         如果此时为UTF-8,表示UTF-8编码

        此时可以给open方法加上encoding,显示指定与文本相同的字符集,即可解决

        更具体的可以参考这个文档:(47 封私信 / 58 条消息) 程序员必备:彻底弄懂常见的7种中文字符编码 - 知乎https://zhuanlan.zhihu.com/p/46216008

上下文管理器

        打开文件之后, 是容易忘记关闭的. Python 提供了 上下文管理器 , 来帮助程序猿自动关闭文件.使用 with 语句打开文件.

        当 with 内部的代码块执行完毕后, 就会自动调用关闭方法.

with open('d:/test.txt', 'r', encoding='utf8') as f:lines = f.readlines()print(lines)

        

        本期内容到这里就结束了,到此python的基础语法就结束了。

        喜欢请点个赞,谢谢

封面图自取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98760.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98760.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98760.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

swiper插件的使用

官方网址:https://www.swiper.com.cn/ 1、点击导航栏,获取Swiper里边的下载Swiper 2、选择要下载的版本【本次案例版本5.4.5】,然后解压缩文件夹,拿到swiper.min.js和swiper.min.css文件,放到项目对应的css文件和js文…

Vue3+JS 组合式 API 实战:从项目痛点到通用 Hook 封装

Vue3 组合式 API 的实战技巧 —— 组合式 API 帮我解决了不少 Options API 难以应对的问题,尤其是在代码复用和复杂组件维护上。一、为什么放弃 Options API?聊聊三年项目里的真实痛点​刚接触 Vue3 时,我曾因 “惯性” 继续用 Options API 写…

把 AI 塞进「电梯按钮」——基于 64 kB 零样本声纹的离线故障预测按钮

标签:零样本声纹、电梯按钮、离线 AI、TinyML、RISC-V、低功耗、GD32V303、故障预警 ---- 1. 背景:为什么按钮要「听声音」? 全国 700 万台电梯,按钮故障率 0.3 %/年,却常出现: • 机械卡滞、触点氧化&…

清华大学联合项目 论文解读 | MoTo赋能双臂机器人:实现零样本移动操作

研究背景 移动操作是机器人领域的核心挑战,它使机器人能够在各种任务和动态日常环境中为人类提供帮助。传统的移动操作方法由于缺乏大规模训练,往往难以在不同任务和环境中实现泛化。而现有操作基础模型虽在固定基座任务中表现出强泛化性,却无…

go webrtc - 2 webrtc重要概念

webrtc是一套音视频传输技术生态,不是一个协议或一个什么东西。3种模式本文基于 SFU 形式阐述!重要概念:sfu 服务负责:信令 服务负责:peerConnection:track:房间:虚拟分组概念用户&a…

“下游任务”概念详解:从定义到应用场景

“下游任务”概念详解:从定义到应用场景 一、什么是“下游任务”? 在机器学习(尤其是深度学习)中,“下游任务”(Downstream Task)是相对“上游过程”而言的目标任务——可以理解为:我…

视频怎么做成 GIF?用 oCam 一键录制 GIF 动画超简单

GIF 动图因其生动直观、无需点击播放的特点,越来越受欢迎。你是否也曾看到一段有趣的视频,想把它做成 GIF 发给朋友或用在PPT里?其实,将视频片段转换为 GIF 并不需要复杂的视频剪辑技术,使用一款支持直接录制为 GIF 的…

Vue.config.js中的Webpack配置、优化及多页面应用开发

Vue.config.js中的Webpack配置、优化及多页面应用开发 在Vue CLI 3项目中,vue.config.js文件是工程化配置的核心入口,它通过集成Webpack配置、优化策略和多页面开发支持,为项目构建提供高度可定制化的解决方案。本文将从基础配置、性能优化、…

行业学习【电商】:直播电商的去头部化、矩阵号?

声明:以下部分内容含AI生成这两个词是当前直播电商和MCN领域的核心战略,理解了它们就理解了行业正在发生的深刻变化。一、如何理解“去头部化”?“去头部化” 指的是平台或MCN机构有意识地减少对超头部主播(如曾经的李佳琦、薇娅&…

【MFC视图和窗口基础:文档/视图的“双胞胎”魔法 + 单文档程序】

大家好,我是你的MFC编程小伙伴!学MFC就像探险古墓:到处是神秘的“房间”(窗口)和“宝藏”(数据)。今天咱们聊聊核心概念 – 视图、窗口和文档。这些是MFC的“骨架”,懂了它们&#x…

深度学习(六):代价函数的意义

在深度学习的浩瀚世界中,代价函数(Cost Function),又称损失函数(Loss Function)或目标函数(Objective Function),扮演着至关重要的角色,它就像一个导航员&…

Kable使用指南:Android BLE开发的现代化解决方案

概述 Kable(com.juul.kable:core)是一个专为Android蓝牙低功耗(BLE)开发设计的Kotlin协程友好库。它通过提供简洁的API和响应式编程模式,极大地简化了BLE设备交互的复杂性。本文将详细介绍Kable的使用方法,…

Android图案解锁绘制

使用到的库是Pattern Locker,根据示例进行了修改,把默认样式和自定义样式进行了合并调整。 设置密码 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xm…

Kotlin 协程之 Flow 的理解使用及源码解析

前言 在前面的文章中&#xff0c;我们已经讨论了 Channel 的概念和基本使用以及 Channel 的高阶应用。这篇我们来看日常开发中更常用的Flow。 “冷流” 和 “热流” 的本质 先来梳理一下所谓的 “冷流” 和 “热流”。 核心概念 我们已经知道 Channel 是 “热流”&#xff…

简述ajax、node.js、webpack、git

本系列可作为前端学习系列的笔记&#xff0c;HTML、CSS和JavaScript系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点赞关注不迷路&#xff01;您的点赞、关注和收藏是对小编最大的支持和鼓励&#xff01; 系列文章目录 简述ajax、…

经营帮会员经营:全方位助力企业高效发展,解锁商业新可能

在商业竞争愈发激烈的当下&#xff0c;企业若想脱颖而出&#xff0c;高效的经营管理体系至关重要。经营帮的会员经营板块&#xff0c;凭借丰富且实用的功能&#xff0c;为企业打造了一站式的经营助力平台&#xff0c;从多维度赋能企业&#xff0c;让发展之路更顺畅。会员经营与…

Vue 封装Input组件 双向通信

子组件<template><div class"box"><div class"box-left"><input blur"handleBlur" v-model"localInput" class"box-left-input"> </div><div class"box-right"><p style…

伽马(gamma)变换记录

此只记录伽马变换原理及其应用结果&#xff08;文章所有内容基于数字图像处理-冈萨雷斯&#xff09;&#xff0c;和直接用MATLAB代码生成伽马变换代码。一、原理伽马变换的公式很简答 就是一个有规律的幂运算 公式如下&#xff1a;一般在图像中进行应用是 C1 y为不同值时r的输…

电路学习(六)三极管

三极管是一种电流驱动元器件&#xff08;MOS管为电压驱动&#xff09;&#xff0c;在电路中可以充当开关&#xff0c;放大电流等作用。本文章参考了尚硅谷的视频资料。1. 什么是三极管&#xff1f;三极管又被称为晶体三极管&#xff08;Bipolar Junction Transistor&#xff0c…

配置docker常见问题

输入sudo yum install -y yum-utils device-mapper-persistent-data lvm2出现Cannot find a valid baseurl for repo: base/7/x86_64一、检查网络输入ping www.baidu.com出现PING www.a.shifen.com (220.181.111.1) 56(84) bytes of data. 64 bytes from 220.181.111.1 (220.18…