python基础知识(字典、文件)

字典

是一种存储键值树的结构。

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

例:每个学生都有自己的学号,知道学号就可以确定这个同学,此处的学号就是“键”,这个同学就是“值”。

字典的任何操作都是针对key进行的。

创建字典

创建一个空的字典,使用()表示字典。

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

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

键值对之间使用,分割最后一个逗号间隔可有可无,键和值之间用:分割。(冒号后推荐加一个空格),要求键不可重复。

使用print 来打印字典内容。

student = {'id':20704,'name':"zhangsan"}
print(student)

查找key

使用 in 或者not in可以判断key是否在字典中存在,返回布尔值。

a = {
    1: 3,
    4: 76,
    56: 90
}
print(56 in a)  #True
print("student" in a)  #False

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

a = {
    "name":"wangtignting",
    "year": 2001,
    "sex": "nan"
}
print(a["sex"])   #nan
print(a["name"])   #wangtignting

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

 对于字典来说,使用 in  或者[ ] 来获取value,都是比较高效的操作。

对于列表来说,使用 in 比较低效的,而使用 [ ]是比较高效的。

字典的新增、修改元素

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

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

student = {
    "id" : 11,
    "name": "zhangsan",
}
student["score"] = 90
print(student)

#运行结果为:{'id': 11, 'name': 'zhangsan', 'score': 90}

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

student = {
    "id" : 11,
    "name": "zhangsan",
    "score": 80,
}
student["score"] = 90    #修改键值对的值
print(student)
#运行结果为:{'id': 11, 'name': 'zhangsan', 'score': 90}

删除元素

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

a = {
    "name": "zhangsan",
    "id": 34,
    "sex": "nan"
}
print(a)
a.pop("id")
print(a)
#运行结果:{'name': 'zhangsan', 'id': 34, 'sex': 'nan'}
#{'name': 'zhangsan', 'sex': 'nan'}

字典的遍历 

字典是哈希表,进行增删改查(常数级)操作都是高效的,遍历效率较差 

a = {
    'id':1,
    'name':'zhangsan',
    'score':90
}
for key in a:
    print(key,a[key])

for key,values in a.items():
    print(key,values)

 在c++或Java中,哈希表里面的键值对存储的顺序是无序的。

在python中,能够保证遍历出来的顺序和插入顺序一致。

keys 获取到字典中的所有的key;values 获取到字典中的所有 value;items 获取到字典中的所有键值对。得到的结果首先是一个列表一样的结构,里面每个元素又是一个元组,元组里面包含了键和值。

a = {
    'id':1,
    'name':'zhangsan',
    'score':90
}
print(a.keys())
print(a.values())
print(a.items() )

 

 合法分key类型

不是所有的类型都可以作为字典的key,字典本质上是一个哈希表,哈希表的key要求是”可哈希的“,也就是可以计算出一个哈希值。可以使用 hash 函数计算某个对象的哈希值,但凡能够计算出哈希值的类型,都可以作为字典的key。

列表和字典是不可哈希的,无法计算出其哈希值,而整数、浮点数、字符串、元组都是可哈希的。

不可变的对象,一般就是可哈希的。可变的对象,一般就是不可哈希的。

print(hash(2))
print(hash(3.14))
print(hash("hello"))

 文件

打开文件

用open 打开文件,第一个参数为文件路劲,第二个参数为查看方式。当文件不存在的时候尝试按照读方式打开,就抛出了文件没找到异常。

open 的返回值是一个文件对象,文件的内容是在硬盘上的,此处的文件对象则是内存上的一个变量,后续读写文件操作,,都是拿着这个文件对象来进行操作的,此处的文件对象就像一个“遥控器”,通过这个“遥控器”来控制硬盘。

计算机中,把这种远程操控的“遥控器”称为“句柄”(handler)。 

#使用 open 打开一个文件
f = open('D:/代码学习/python学习/python/wenjian/test.txt','r')
print(f)
print(type(f))

 关闭文件

使用close 关闭文件。文件在打开后,使用结束后一定要关闭。打开文件是在申请一定的系统资源,不再使用文件的时候,资源就应该及时释放,否则就可能造成文件资源泄露,进一步导致其他部分的代码无法顺利打开文件。

写文件

文件打开后就可以写文件了。写文件要使用写方式打开,open第二个参数设为”w“,使用write方法写入文件。使用‘r’方式写文件会报错。

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'w')
f.write('hello')
f.close()

使用’w'一旦打开文件成功,就会清空文件原有的数据。使用‘a'实现”追加写“,此时原有内容不变,写入的内容会存在于之前文件内容的末尾。

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'w')
f.write('hello')#加上\n可以换行
f.close()

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'a')
f.write('word')
f.close()

 

读文件

①、读文件内容需要使用”r“的方式打开文件,使用read方法完成读操作,参数表示”读取几个字符“

文档中是按照UTF8编码的格式,所以在代码操作读取文件中也要使用UTF8的编码格式,而编译器中默认使用GBK,在打开文件的时候加上参数指定编码格式与文档编码格式一致即可。

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'r',encoding = 'utf8')
result = f.read(2)
print(result)
f.close()

 

②、更常见的读操作是按行读取,最简单方法直接用for循环。

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'r',encoding='utf8')
for line in f:
    print(f'line={line}')
f.close()

上述代码执行结果,会在每一行末尾存在两个空行,一个是因为文件读到的文件内容(此行末尾就带有\n),此处使用print来打印,又会自动加上一个换行符。

解决空行的方法:可以给print再多设定一个参数,修改print自动添加换行行为。

    print(f'line={line}',end = ' ')

此处所加的end通常表示在每次打印的末尾添加的东西,默认是\n,修改为空字符串后就显示未添加任何其他符号,依旧为按行读取。

 ③、可以使用readlines方法,直接把整个文件所有内容全部都读出来,按照行组织到一个列表里。相较于前面方法而言,更为高效。一次读完。

f = open('D:/代码学习/python学习/python/wenjian/test.txt', 'r',encoding='utf8')
lines=f.readlines()
print(lines)
f.close()

上下文管理器

为了防止写代码时打开文件后忘记关闭。当with对应的代码块执行结束,就会自动执行f的close。

def func():
    with open('D:/代码学习/python学习/python/wenjian/test.txt', 'r',encoding='utf8') as f :
        lines = f.readlines()
        print(lines)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值