首页 > 编程语言 > 详细

python基础08--文件处理与三元运算

时间:2020-04-26 15:18:47      阅读:48      评论:0      收藏:0      [点我收藏+]

文件处理模式:

打开文件的两种方式:

技术分享图片
#第一种
f=open("1.txt","r+",encoding="utf-8")
f.write("sfxdz\n")
f.close()
#第二种
with open("1.txt","r+",encoding="utf-8") as f:
    f.write("你好")
View Code

 

r模式:只读   (变量名+   read读取、readable判断是否可读、readline读取一行、readlines指定读取几个字符)

w模式:只写(实质:(文件若不存在新建空白文档)编辑新内容后进行覆盖)    (write写、writeable判断是否可写、writelines以列表的形式写入)

a模式:只追加  (在文件的末尾处追加新内容)                        (write写、writeable判断是否可写、writelines以列表的形式写入)

还有r+ w+ a+模式

b模式:以字节的方式对字符串进行处理,b模式打开文件不用指定编码

1.字节转变成字符串的过程为解码(decode)

技术分享图片
#用b的方式读取文件,是以字节的方式显示,如要查看文件内容,要通过解码的过程
f=open("1.txt","rb")
data=f.read()
print(data.decode("utf-8"))
View Code

2.字符串转变成字节的过程为编码(encode)

技术分享图片
#用b的方式对文件进行写的操作,一定要把字符串先通过编码转换成字节再进行写入操作(通过bytes或者encode)
f=open("1.txt","wb")
f.write(bytes("你好\n",encoding="utf-8"))
f.write("你好\n".encode("utf-8"))
View Code
技术分享图片
#追加模式与写模式的操作相似
f=open("1.txt","ab")
f.write(bytes("你好dfdss\n",encoding="utf-8"))
f.write("你好dfds\n".encode("utf-8"))
View Code

 

其他文件操作:

encoding:查看文件打开的编码方式

技术分享图片
f=open("1.txt","r")
print(f.encoding)
View Code

flush:刷新并保存到硬盘

tell:显示光标当前所在位置(以字节为单位)

seek(数字,参数):控制光标移动的位置(以字节为单位)

默认参数为0,从文件开头开始seek,参数1、2都只要用b模式,参数为1,则从光标当前位置开始seek,参数为2,数字为负数,则从文件末尾倒序开始seek(可用于日志查询)

技术分享图片
f=open("日志","rb")
for i in f:   #用f而不用f.readlines能减少内存的占用,用一行取一行
    offs=-10
    while True:
        f.seek(offs,2)
        date=f.readlines()
        if len(date) > 1:
            print(date[-1].decode("utf-8"))
            break
        offs =offs*2
View Code

truncate(数字):实质是写的操作,从文件开头开始截断,只显示0-数字的字节(不能用w、w+模式,以字节为单位)

read:以字符为单位

 

迭代器:

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

可迭代对象:实现迭代器协议的对象(对象内部定义--iter--()方法)

可迭代对象实现了迭代器协议,python内部工具(如for循环、sum、min、max函数)使用迭代器协议访问对象

 

for循环的本质:使用迭代器协议循环所有对象(1.先用--iter--()变成可迭代对象       2.再调用---next--()方法进行循环   3.遇到异常,中止迭代)

技术分享图片
s="hello"
st=s.__iter__()
print(st.__next__())  #可迭代对象的方法
print(st.__next__())
print(st.__next__())
print(next(st))       #python内置的方法
print(next(st))
View Code

所以for循环提供了迭代所有对象的统一方法。

循环方式:1.使用索引进行循环(仅限于序列类型:字符串、列表、元组)

                  2.for循环(一切对象,包括序列类型、非序列类型、文件内容)

 

生成器:

三元表达式:

技术分享图片
name="alex"
#name="dasjhd"
l=("sb" if name == "alex" else" 帅哥")  #这就是三元表达式,最多只有三元
print(l)
View Code

列表解析:

技术分享图片
l=["鸡蛋%s" %i for i in range(10)]
print(l)
View Code

 

生成器:是一种数据类型,自动实现迭代器协议,所以生成器就是可迭代对象

生成器在python中的表现形式:

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

技术分享图片
def text():
    yield 1
    yield 3
g=text()
print(g)
print(g.__next__())
View Code

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

技术分享图片
l=("鸡蛋%s" %i for i in range(10))
print(l)
print(l.__next__())
print(next(l))
View Code

使用生成器的优点:能进行延迟操作,是指在需要的时刻才产生结果,而不是立刻产生结果,能节省内存。

总结:1.把列表解析的[]换成()就是生成器表达式

           2.列表解析和生成器表达式都是一种便利的编程方式,不过生成器表达式更省空间

           3.python不但使用迭代器协议,让for循环更加通用,大部分内置函数,也是使用了迭代器协议访问对象的,例如sum函数,该函数用迭代器协议访问对象,

           而生成器实现了迭代器协议。

 

python基础08--文件处理与三元运算

原文:https://www.cnblogs.com/sakura-gyt/p/12773392.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!