首页 > 编程语言 >Python基础 day9 迭代生成,文件操作

Python基础 day9 迭代生成,文件操作

时间:2024-12-16 10:31:47浏览次数:6  
标签:文件 迭代 day9 Python encoding next print open

一:迭代器  iter

特点:每次迭代得到的结果都是下一次迭代的初始值。

迭代对象:字符串,列表,元组,集合,字典。

可迭代对象的表现形式为内置了iter方法的数据,都属于可迭代对象。

声明迭代器:

方法一:

                变量名 = 可迭代对象.__iter__()

方法二:

                变量名 = iter(可迭代对象)

        变为迭代器,就可以用next方法把里面的数据一个个取出来使用。

迭代器取值:

方法一:

                迭代器名称.__next__()

方法二:

                next(迭代器名称)

注意:迭代器next一次只能取一个值,并且是向下取值不能回头。

StopIteration :当进行迭代取值时,超过数据长度会进行报错。

num=[1,2,3,4]
a=num.__iter__()
print(type(a))     #<class 'list_iterator'>
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())

        如果再写一个  print(a.__next__())   语句会报错,因为超出了取值范围。

        有了迭代器后,我们可以不依赖索引迭代取值了,使用while循环的方式也可以进行迭代取值。

while True:
    try:
        print(a.__next__())
    except StopIteration: #捕捉异常终止循环
        break

        for循环的原理,也就是把数据转为一个迭代器,然后把里面的数据一个个的取出来使用,直到捕捉到StopIteration异常,结束迭代。

二:生成器   yield

1.生成器可以理解为自定义迭代器,当一个函数内有yield这个关键字的话,那么这个函数就是生成器。

2.生成器返回的是迭代数据,需要使用迭代取值的方式获取,数据生成是边生成变迭代。

3.yield --这个可以返回迭代数据,但是返回之后不会停止函数的执行而是进入暂停状态,等待下一次调用取值就会往后继续执行。

表达式:

                名称 = (迭代值 for 变量 in 可迭代对象/range)

下面是一个生成器函数:
 

def fun():
    for i in range(1, 11):
        yield f'这是第{i}碗'
        print('好好吃')

f=fun() #把生成器对象赋值给一个变量
print(type(f)) #<class 'generator'>生成器


while True:
    try:
        print(f.__next__())
    except StopIteration:
        break
noodle=(f'这是第{i}碗' for i in range(1,6))
print(type(noodle)) #<class 'generator'>
print(next(noodle))
print(next(noodle))
print(next(noodle))
print(next(noodle))
print(next(noodle))

三:绝对路径和相对路径

文件路径:文件存储的位置

绝对路径:完整的路径,从盘符开始找文件(c盘符)

相对路径:简短的路径,有参考对象,默认从当前文件开始

相关操作:

                ./   表示当前文件夹

                ../   表示返回上一层文件夹

                ../../   返回这个文件的上上层文件夹

四:文件操作

        用Python代码来操作电脑里的文件(txt,exe,mp3..)--文本/图片/音频。

文件的数据类型:

        t:text   文本数据(文件操作默认就是文本数据)

        b:byte   以字节码的方式操作数据--目前还不需要使用,后续讲到网络编程/爬虫的时候会使用

        wb:以字节码的方式写入数据

        wt:以文本的方式写入数据

        rb:以字节码的方式读取数据

        文件操作三要素:打开文件,操作文件,关闭文件

文件操作模式:

w:write   写入数据,如果文件里有数据,会被覆盖,如果没有这个文件则会新建。

a:append   追加数据,如果文件里有数据,不会覆盖而是会追加到后面

r:read   读取数据

语法一:

                文件名 = open(文件路径/文件名.后缀,操作模式,encoding = 'utf-8')

                f.操作模式()

                f.close()

注意:如果不写文件路径,默认在当前文件夹。

f是作为文件对象.名字是不固定的,但是一般都是叫f

f.read():读取所有数据,也可以在括号里面放参数,指定读取的数据。(得到的数据是字符串)

f.readline():读取一行数据,也可以在括号里面放参数,指定读取的数据,但是超出一行的内容,也是会读取一行。(得到的数据是字符串)

f.readlines():读取所有行,并返回一个包含所有行的列表的方法。每个元素都是文件中的一行 ,包括换行符\n。(得到的数据是列表)

f.closed --> 判断文件是否已经关闭 True关闭 False没关闭

f.writable() --> 判断文件是否可写 True可写 False不可写

f.readable() --> 判断文件是否可读 True可读 False不可读

f=open('小白.txt','w',encoding='utf-8')
f.write('好好学习,天天向上')
print(f.writable())
f.close()
print(f.closed)

f=open('小白.txt','a',encoding='utf-8')
f.write('认真学习')
f.close()

f=open('小白.txt','r',encoding='utf-8')
print(f.read()) #可以读取全部数据
f.close()

f=open('小白.txt','r',encoding='utf-8')
print(f.read(3)) #也可以指定参数读取
print(f.readable())
f.close()

文件操作语法格式2:

        为了避免文件操作没有关闭文件,导致内存泄漏,有种更推荐的写法,叫with open上下文管理器。

语法:

with open (文件路径\文件名.后缀,操作模式,encoding = 'utf-8') as 名字:名字.操作模式()

该模式会对文件自动关闭

with open('study.txt', 'w', encoding='utf-8') as f:
    f.write('学海无涯苦作舟\n')
    f.write('每天都要学习\n')
print(f.closed)

with open('study.txt', 'a', encoding='utf-8') as f:
    f.write('学习让我快乐\n')
    f.write('学习使我开心')

with open('study.txt', 'r', encoding='utf-8') as f:
    res = f.readline()
print(res)

with open('study.txt', 'r', encoding='utf-8') as f:
    res1 = f.readline(20)
print(res1)
print(type(res1))

with open('study.txt', 'r', encoding='utf-8') as f:
    res2 = f.readlines()
print(res2)  # <class 'list'>
print(type(res2))
print(res2[2])

        这段代码可以自行理解。

标签:文件,迭代,day9,Python,encoding,next,print,open
From: https://blog.csdn.net/2401_88454635/article/details/144492531

相关文章