python遍历本地文件系统 按文件大小排序

python遍历本地文件系统 按文件大小排序

在这个例子中,主要会用到python内置的和OS模块的几个函数:

    os.walk() : 该方法用来遍历指定的文件目录,返回一个三元tuple(dirpath, dirnames, filenames) ,其中dirpath为当前目录路径,dirnames为当前路径下的文件夹,filenames为当前路径下的文件
    os.path.join() :可以用来连接目录和文件名,这样就可以得到某个文件的全路径了
    os.path.getsize() :获取制定文件的文件size ,配合os.path.join()使用, 如果传入的为文件夹路径,返回0L
    sorted : 迭代一个items ,然后返回一个新的排序好的list,不会影响原对象

有了这几个函数后,遍历本地文件就非常简单了,前三个函数不详细说,

这边主要讲下第四个函数sorted 的用法:

讲sorted前,先介绍一下iterable ,中文意思是迭代器。

1. Python的帮助中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象。

iteralbe主要包括3类:
第一类是所有的序列类型,比如list(列表)、str(字符串)、tuple(元组)。
第二类是一些非序列类型,比如dict(字典)、file(文件)。
第三类是你定义的任何包含__iter__()或__getitem__()方法的类的对象。

2. python中对sorted方法的讲解:

sorted(iterable[, key][, reverse])

作用:Return a new sorted list from the items in iterable.

其中 key, 和reverse为可选参数

key指定一个接收一个参数的比较函数,用来从买个list元素中提取一个用于比较的关键字: 例如key=str.lower. 默认值是None(直接比较元素)

reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。

在原来的版本中还有个cmp参数,现在已经去掉了,兼容方案是 使用 functools.cmp_to_key() 把cmp函数转换为key函数。

key 返回一个 lambda ,所谓 lambda就是一个匿名小函数,lambda d: d[1] 对应于代码就是:

def (d):
    return d[1]

对应到字典中,就是返回字典键值对中的值,d[0]表示键,对字典使用sorted会返回一个元祖list

好了,基本的函数都讲完了,下面附上例子的相应代码:

# -*-coding:utf-8-*-
import os

filePath = ‘D:\temp’

fileMap = {}
size = 0

# 遍历filePath下的文件、文件夹(包括子目录)
for parent, dirnames, filenames in os.walk(filePath):
    for dirname in dirnames:
        print(‘parent is %s, dirname is %s’ % (parent, dirname))

    for filename in filenames:
        print(‘parent is %s, filename is %s’ % (parent, filename))
        print(‘the full name of the file is %s’ % os.path.join(parent, filename))
        
        size = os.path.getsize(os.path.join(parent, filename))
        fileMap.setdefault(os.path.join(parent, filename), size)

filelist = sorted(fileMap.items(), key=lambda d: d[1], reverse=False)
for filename, size in filelist:
    print(“filename is %s , and size is %d” % (filename, size))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119596.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • STM32驱动OV7725摄像头颜色识别「建议收藏」

    STM32驱动OV7725摄像头颜色识别「建议收藏」实验目的:使用stm32驱动OV7725摄像头进行图像实时采集,在tft屏幕上实时显示并识别图像中的特定颜色,在颜色的周围画上框。实验现象:我的工程代码链接:http://download.csdn.net/my程序移植自阿莫论坛某位大神的程序。链接:http://www.amobbs.com/thread-5499408-1-1.html?_dsign=85056954实现原理:

    2022年9月23日
    3
  • FileInputStream分析

    FileInputStream分析我们先写个简单的Demo,代码如下:packagecom.lg.io;importjava.io.FileInputStream;importjava.io.IOException;publicclassFileInputStreamDemo{publicstaticvoidmain(String[]args)throwsIOException{…

    2022年6月11日
    39
  • youtube8m 第四届_youtube怎么上

    youtube8m 第四届_youtube怎么上今天进入前十

    2022年5月3日
    33
  • android之activity的生命周期详解

    刚在看mars老师的视频,看到activity的生命周期,感觉挺有收获,就总结了一下.为了更清楚的看清楚工作的具体过程,举例如下:,建立两个activity,一个main,一个another,在main里面放置button加监听器跳转向another,在每个复写的activity的状态方法里都加一个log输出,比如onCrea

    2022年3月9日
    42
  • 美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?

    美团Java面试一轮游,太激烈了,问啥啥不会,我该怎么办?一面1、自我介绍答:自我介绍是面试中唯一的自己主动介绍自己的环节,一定要好好把握好,你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握地很好,反正就是要把自己的优势凸显出来,比如自己对于java的知识较熟悉,我介绍完自己的本科经历以后,我就说我是保送到本校继续读研究生,然后最末尾会加上自己熟悉java,然后面试官就会问java的一些东西;2、项目介绍及其亮点答:使劲吹…3、java的8种数据类型有哪些?答:感觉这个问题被问烂了,int,short,long,float,dou

    2022年7月7日
    30
  • 应用架构,业务架构,技术架构和业务流程图详解怎么写_业务架构和应用架构

    应用架构,业务架构,技术架构和业务流程图详解怎么写_业务架构和应用架构应用架构应用架构(ApplicationArchitecture)是描述了IT系统功能和技术实现的内容。应用架构分为以下两个不同的层次:企业级的应用架构:企业层面的应用架构起到了统一规划、承上启下的作用,向上承接了企业战略发展方向和业务模式,向下规划和指导企业各个IT系统的定位和功能。在企业架构中,应用架构是最重要和工作量最大的部分,他包括了企业的应用架构蓝图、架构标准/原则、系统的边界…

    2022年10月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号