美文网首页Python实践简书收藏--Pythonpython基础
独家干货2,融合多个技巧的Python文件-综合实战应用

独家干货2,融合多个技巧的Python文件-综合实战应用

作者: 菜鸟学python | 来源:发表于2016-11-14 21:53 被阅读175次

    阅读本文大概需要6分钟

    最近有几个好学的小伙伴留言跟我说,希望能多加一些实战的例子,甚至有一个徐mm每天看我的文章打卡学习,让我深受鼓舞,于是我打算写一个能够把文件的知识点融合到一个实际生活中的例子,我想来想去写一个综合小例子,这个例子会对前面所学的列表/字典,函数和文件,综合应用.

    希望通过这个例子,可以让初学者更快的入门:

    要点:

    如何用文件os模块

    如何用递归函数

    如何使用字典列表

    案例:

    假如我们有一个目录里面包含若干个文件和子目录:

    问题1:我们要统计该目录下有多少个文件并显示出来(包含子目录)

    问题2:该目录总共的大小可以按M,也可以按K显示

    问题3:该目录下最大的文件和最小的文件,以及对应的大小

    目录为'C:\myPython',结构如下:

    |---demo---

    |--demo_01.exe    14,390KB

    |--demo_02.msi    17,412KB

    |--other

    |--info.docc  2,329KB

    |---log-----

    |--1110_log.txt   1,382KB

    |--1111_log.txt   1,364KB

    |--1112_log.txt   1,368KB

    |---pic-----

    |--0127_1.jpg     92KB

    |--0127_2.jpg     89KB

    |--0127_3.jpg     71KB

    深入分析:

    程序其实就是数据结构+算法,所以我们先确定自己的数据结构,还有算法

    1).因为要列出最大/最小的文件名字和大小,数据结构我们用字典

    2).算法的话,先把目录下的全部文件和目录列出

    若是文件就统计大小

    若是子目录,就继续寻找该目录下的子文件,然后不断重复刚才的过程,因为我们不知道有多少层套嵌的子目录,最好用递归

    3).最后就是显示,要按MB,KB显示,需要我们定义一个扩展的函数入参结构,用默认位置参数

    说了这么多,快看源码吧:

    1.获得单个文件的大小和名字


    2.列出目录下所有的文件和子目录内的文件

    3.统计文件大小并按MB,KB显示

    4.写一个主函数,来调用上面几个子函数

    >>

    C:\myPython\demo

    C:\myPython\demo\demo_01.exe

    C:\myPython\demo\demo_02.msi

    C:\myPython\demo\other

    C:\myPython\demo\other\info.docx

    C:\myPython\log

    C:\myPython\log\1110_log.txt

    C:\myPython\log\1111_log.txt

    C:\myPython\log\1112_log.txt

    C:\myPython\pic

    C:\myPython\pic\0127_1.jpg

    C:\myPython\pic\0127_2.jpg

    C:\myPython\pic\0127_3.jpg

    Total>: files num=9,size=37.59M#统计结果

    (17829888L, 'C:\\myPython\\demo\\demo_02.msi')#最大文件

    (72224L, 'C:\\myPython\\pic\\0127_3.jpg')#最小文件

    总结:

    这个小案例其实有一个小问题,当文件的嵌套层非常非常多,若某一个文件的全路径长度,名字长度超过256的时候会报错,所以处理文件的时候一定加异常处理。

    我用这段代码去统计一个20000个文件的大目录,大概5个G,需要31秒,速度有点慢,性能需要进一步优化一下.

    Total>: files num=19829,size=5883.95M

    [Finished in 31.3s]

    好了文件综合实战小例子就讲到这里啦,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

    原文链接:

    https://mp.weixin.qq.com/s?__biz=MzIxNjM4NDE2MA==&mid=2247483871&idx=1&sn=4f3ea341227e35ec889dc849d6d7e036&chksm=97889610a0ff1f069715ed7ecd52ad7e62f51d8e5f0724f0bb9fbcacdff6d52b9a7d7ea7a762&scene=0&pass_ticket=JfaQ7%2BG%2BwkixzTDrCHKk3DlbgA29SJZFuV497QZCy5hFT54wCb1luAZUcwXY7GUH

    相关文章

      网友评论

      • 小贱贱9395:奇怪,我运行下来在print(min(new_files_dict))地方报错,ValueError: min() arg is an empty sequence,但是print(max(new_files_dict))能正常输出。两条语句对齐了,都在if判断下
      • smartapple:简书上的阅读效果 好差 还是阅读原文比较有感觉
        菜鸟学python:@四条眼的小胖子 哈哈

      本文标题:独家干货2,融合多个技巧的Python文件-综合实战应用

      本文链接:https://www.haomeiwen.com/subject/cekkpttx.html