Day18 文件处理与三元运算

一、文件操作

文件处理b模式,该模式下不能指定编码

Windows模式下空格就是\r\n

而python会自动把\r给去掉,只保留\n,如果不需要这个变换,在open()中指定参数newline=''

文件处理是默认使用t模式,即文本模式,但文件不限于文本,所以需要使用二进制模式,而且可以跨平台

# 文件以字节方式读操作
f = open('a.txt', 'rb')
data = f.read()
print(data)
print('----------------------')
print(data.decode()) 	#如果想要查看原来的信息,则需要重新把Bytes解码

# 输出
b'124981274\r\n13958\r\n123141\r\n12231\r\n13345323\r\n2352'
----------------------
124981274
13958
123141
12231
13345323
2352
# 文件以字节方式写操作
f = open('a.txt', 'wb')	#wb写操作,跟追加ab一样
f.write(bytes('124124\\n', encoding='utf-8'))
f.write('阿瑟东公司'.encode('utf-8'))
f.close()

文件操作的其他方法

函数名功能
f.encoding()返回打开文件时使用的编码方式
f.flush()将内存中的数据写入文件
f.tell()返回当前光标位置
f.seek(n, mode)移动光标到指定位置
f.read(n)读取指定数量的字符或字节
f.truncate(n)截取文件至指定字节数(只适用于写模式,不能是"w"或"w+"模式)
f.readlines()读取文件的所有行,并将其作为列表返回

二、迭代器

迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前走)

可迭代对象:实现了迭代器协议的对象,在对象内部定义了一个__iter__()方法

字符串、列表、元组、字典、集合、文件对象等这些都不是可迭代对象,只不过在for循环时,调用了他们内部的__iter()__方法,把他们变成了可迭代对象

l = [1, 2, 3]

for i in l: 
    # i = l.__iter()__ 
    # i.__next()__
    print(i)

序列类型字符串、列表、元组还可以使用while,下标来访问

当面对非序列类型如字典、集合、文件对象等时,for循环就可以很好的访问【等于while+异常处理】

也可以使用内置函数next(),但本质还是调用__next()__

三、生成器

可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,其本身就是可迭代对象

两种方式

1.生成器函数:常规函数定义,但是用yield语句返回结果,一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。

2.生成器表达式:类似于列表推到,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。

laomuji = ('鸡蛋%s' %i for i in range(10))         #小括号,比列表解析节省内存

sum()、min()、max()等内置函数也是实现了迭代器协议

三元表达式

表达式1 if 条件 else 表达式2

l = ['鸡蛋%s' %i for i in range(10) if i > 5 ] #也是直接一次性写入内存,因为其本身也是列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值