【Python零基础入门篇 · 19】:os模块、可迭代对象和迭代器对象

简介: 【Python零基础入门篇 · 19】:os模块、可迭代对象和迭代器对象

一、os模块


1、os模块中的命令:


os.getcwd()——获取当前工作目录,即当前程序文件所在的文件夹


os.chdir(path)——改变当前目录,需传递新的路径


os.listdir(path)——返回指定路径下的文件名称列表


os.mkdir(path)——在某个路径下创建文件夹,找不到相应的路径则会报错


os.makedirs(path)——递归创建文件夹,找不到路径时自动创建


os.rmdir(path)——删除文件夹


os.remove(path)——删除文件


os.removedirs(path)——递归删除文件夹,必须都是空目录,如果不是空文件夹将会报错


os.rename(旧名,新名)——文件或文件夹重命名


os.path.split(path)——将文件路径分割成文件夹和文件名,并将其作为二元组返回


os.path.abspath(path)——返回path规范化的绝对路径


os.path.join(path1,path2,……)——将多个路径组合后返回,例如将文件夹和里面的文件组合得到绝对路径


os.path.getsize(path)——返回文件大小,以字节为单位  


os.path.isfile(path)——判断所给的路径是否是一个文件,是则返回True,否则返回False


os.path.isdir(path)——判断所给的路径是否是一个文件夹,是则返回True,否则返回False


2、常用命令的代码演示


  • os.getcwd()

获取当前工作目录,即当前程序文件所在的文件夹

fac903a199f84acb901e136dd290d87a.png


  • os.chdir(path)


改变当前目录,需传递新的路径


  • os.listdir(path)


返回指定路径下的文件名称列表


例:在F盘下创建一个名为“文件操作”的文件夹,并在文件夹里创建几个工作文件


6db2d908e6c34162a07c150eb88cbfef.png


2fbfe5d89bed4c0fa5fe9534b5c9984b.png


   

  •  os.mkdir(path)


在某个路径下创建文件夹,找不到相应的路径则会报错


  • os.makedirs(path)


递归创建文件夹,找不到路径时自动创建


6d29408d5aa64d20af3072c1a0f763f9.png


7d2dfc6a820d482dbc95fdde2a51de0f.png


  • os.rename(旧名,新名)


文件或文件夹重命名

8ccde8067a7d4665ae6ecde09f4e6303.png


3、举例:查找文件夹下所有满足要求的文件


例如:查找“F:\文件操作"文件夹下所有以xls或xlsx为后缀名的文件

c6665df92f8546fa83f873f7076df2ba.png


6415900a5e554ecd8bd4c24e4eb0b91b.png


附上代码源码

import os
def travel(path):
    if os.path.isfile(path): # 判断所给的路径是否是文件,如果是文件则结束代码
        return
    file_list = os.listdir(path) # 获取文件夹中的所有文件名
    for cur_file in file_list:
        temp_path = os.path.join(path, cur_file) # 将文件夹和文件名组合在一起
        if os.path.isfile(temp_path):
            if temp_path.endswith("xls") or temp_path.endswith("xlsx"): # 判断文件是否以"xls"、“xlsx”结尾,是则输出,不是则进行下一循环
                print(temp_path)
                continue
        if os.path.isdir(temp_path): # 判断路径是否是一个文件夹,是则递归调用
            travel(temp_path)
travel('F:/文件操作')


二、可迭代对象和迭代器对象


1、可迭代对象(iterable)


可通过for...in...这类语句遍历读取数据的对象称之为可迭代对象


可迭代对象:字符串、列表、元组、字典、集合


满足以下条件的对象可以成为可迭代对象


  • 对象实现了__iter__方法        

   

  • __iter__方法返回迭代器对象


for循环的工作原理


  • 在内部对可迭代对象调用__iter__方法,获取到迭代器对象


  • 再一次次的通过迭代器对象调用__next__方法获取迭代结果


2、判断对象是否可以迭代


导入的模块:from collections.abc import Iterable


代码:isinstance(对象,Iterable),如果对象为可迭代对象则返回True,否则返回False


0b1d594d4b91434bb5d1ed7fc187b895.png


2、迭代器(iterator)


迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。


迭代器有两个函数:iter()和next()


通过iter()函数取得可迭代对象的迭代器:


9e32009327c8463db14738eb6a7a20e7.png


以上代码也可写为:

2400629505074ff0a65c4a9b5833527f.png


  • iter()调用该对象的__iter__方法,并把__iter__方法的返回结果作为自己的返回值


  • 再使用next()函数来调用__next__方法


当取完元素后,再使用next()获取下一条数据时会引发StopIteration异常


d4aa50e5916543c48a3efb39f93d7110.png


深入剖析:

496506fc2bfd471d8202625b77ae96a5.png

先通过iter()函数获取可迭代对象Iterable的迭代器,然后对获取到的迭代器不断调用next()方法来获取下一个值并将其赋值给item,当遇到StopIteration的异常后循环结束。




3、可迭代对象和迭代器的转换


可迭代对象:iterable          迭代器对象:iterator


2cd0be91c696421487c852f6874c1c6c.png


  • 总结


(1)可迭代对象可以通过__iter__()方法变成迭代器对象


(2)如果一个对象拥有iter()方法,是可迭代对象;如果一个对象拥有next()方法,是迭代器对象


(3)定义可迭代对象,必须实现iter()方法;定义迭代器,必须实现iter方法和next方法

相关文章
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
356 1
|
6月前
|
安全 Python
告别 os.path 的繁琐:拥抱 Python 的 pathlib
告别 os.path 的繁琐:拥抱 Python 的 pathlib
499 6
|
6月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
344 2
|
6月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
214 4
|
7月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
716 3
|
7月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
299 0
|
6月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
315 0
|
7月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
198 0
|
11月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
481 14
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
634 159