python day 9 知识点

b模式——使用二进制方法读写文档的模式

f = open('test11.py','rb')		#b的方式不能指定编码
data = f.read()

字符串和字节的转换机制

‘字符串’------encode------> bytes
bytes---------decode------> ‘字符串’

print(data.decode('utf-8'))
f.close
#####################################
f = open('test22.py','wb')
x = 'heloo'
x1 = bytes(x,encoding = 'utf-8')	#对字符进行编码,转换为字节形式
f.write(x1)
f.close()

x.encoding('utf-8')	#使用utf-8模式对字符串编码

在Python当中,文件默认的处理方式,统一为文本方式

文档操作的处理方法

- f.closed				#判断文件是否关闭,输出相应的布尔值
- f.encoding			#对文件编码,返回的是文件的编码形式
- f.flush()				#保存一次文件
######需要注意的是,在utf-8编码下,一个字符算一个字节##########
- f.tell()				#读取光标的所在位置
- f = open('b.txt','r',encoding = 'utf-8',newline = ' ')		#读取文件中真正的换行符号
- f.seek(x)				#控制光标的移动,按照x个字节进行移动(在默认情况下,从文档的开头向前移动)
###########read方法读的是字符。注意!!!!########
- f.truncate()			#对文件进行截取(只有在写入模式下才能使用。只有w不行!)

相对于原起始位置的seek操作 :
- f.seek() #默认从光标位置向后移动x个字节
相对于原起始位置的seek操作 :
- f.seek(45,1) #后一个参数为相对位置(负的就是倒着读,从结尾开始算)
读取文件的最后一行 :

offs = 10
while True :
		f.seek(offs,2)
		data = f.readlines()
		if len(data)  > 1 : 
			print('文件的最后一行是%s' %(data[-1].decode))
			break
	offs *= 2

注意:只有在b模式下,光标才可以从结尾开始移动。若使用文本形式打开文件,那么只能从文档开头进行读取

迭代器协议

  1. 迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走不能往前退)
  2. 可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter()__方法)
  3. 协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象
    事实上,字符串、列表、元组、字典、集合、文件对象都不是可迭代对象,只不过在for循环式,调用了他们内部的__iter__方法,把他们变为可迭代对象
l = [1,2,3]
iter_l = l.__iter__()		#遵循迭代器协议,生成可迭代对象
print(iter_l.__next__())

迭代器的好处:省内存
next(iter_l) #就是iter_l.next()

生成器

一种数据类型,这种数据类型自动实现了迭代器协议,是一种可迭代对象。

生成器分类以及在Python中的表现形式

  1. 生成器函数,用yield进行返回操作,而不是return
  2. 生成器表达式:类似于列表推导
    三元表达式:
name = 'alex'
res = 'SB' if name == 'alex' else '帅哥'
print(res)
  • 列表解析
egg_list = []
for i in range(10) : 
	egg_list.append('鸡蛋%s' %i)
print(egg_list)
  • 生成器表达式
('鸡蛋%s' %i for i in range(10) if i > 5)
laomuji = ['鸡蛋%s' %i for i in range(10)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值