【程序员技术练级】学习一门脚本语言 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类:
2. python中对sorted方法的讲解:
- sorted(iterable[, key][, reverse])
其中 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
import os.path filePath = 'D:\temp' fileList = []
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) print("all size is %d" % size) b = sorted(fileMap.items(), key=lambda d: d[1], reverse=False)
for filename, size in b:
print("filename is %s , and size is %d" % (filename, size))
大概输入如下:
parent is D:\temp, dirname is 123
parent is D:\temp, dirname is java
parent is D:\temp, filename is chydb_14.3_XiaZaiBa.zip
the full name of the file is D:\temp\chydb_14.3_XiaZaiBa.zip parent is D:\temp, filename is DriverGenius_green1.rar
the full name of the file is D:\temp\DriverGenius_green1.rar parent is D:\temp, filename is Firefox39.7z
the full name of the file is D:\temp\Firefox39.7z
...省略
好了,大家如果有什么问题或者文件有什么错误的话,可以留言大家一起探讨!
【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统的更多相关文章
- 【程序员技术练级】学习一门脚本语言 python(一)文件处理
现在工作上主要用的语言是java,java在企业级的应用上能够发挥很好的用途,但有时候要做一个小功能时,比如批量更新文件,抓取网页等,这时候用java就显得太笨重了.因此就学习了python这门脚本语 ...
- 【程序员技术练级】学习一门脚本语言 python(三)跟数据库打交道
接着上一篇,该篇讲述使用python对数据库进行基本的CRUD操作,这边以sqlite3为例子,进行说明.sqlite3 是一个非常轻型的数据库,安装和使用它是非常简单的,这边就不进行讲述了. 在py ...
- 【程序员技术练级】熟悉Unix/Linux Shell和常见的命令行(一)文件系统结构和基本操作
作为程序猿,熟悉一些unix/linux命令行是非常必要的,因为部署服务的服务器现在基本上用的都是unix/linux系统,很少在windows上部署服务的. 今天我们就介绍一些在linux上的文件系 ...
- 每个程序员都应该学习使用Python或Ruby
每个程序员都应该学习使用Python或Ruby 如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaSc ...
- 程序员带你学习安卓开发-XML文档的创建与解析
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:程序员带你学习安卓开发系列-Android文件存储 因知识连贯性推荐关注头条号:做全栈攻城狮.从头开 ...
- 程序员带你学习安卓开发系列-Android文件存储
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:.Net程序员快速学习安卓开发-布局和点击事件的写法 主要讲解了布局和点击事件的写法. 上篇文章补充 ...
- 程序员带你学习安卓开发,十天快速入-对比C#学习java语法
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- 好程序员技术分享html5和JavaScript的区别
好程序员技术分享html5和JavaScript的区别,HTML5广义上讲是前端开发学科的代名词,包含HTML5.CSS3及JavaScript三个重要的部分,是运行在浏览器上应用的统称.如PC端网站 ...
- [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …
[Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...
随机推荐
- Sql Server 日期格式化函數 Convert
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2015 10:57AM Select CONVERT(varchar(100), GETDATE( ...
- c# as与is的区别
在c#语言中关于类型的判断与转换有is和as这2种操作符,具体用法如下: is检查一个对象是否兼任与指定的类型,并返回一个Boolean值:true或false,主要,is操作符永远不会抛出异常,一下 ...
- unix网络编程str_cli使用epoll实现
unix网络编程str_cli使用epoll实现 unix环境高级编程中也有这个函数,都是为了讲解IO多路转接.从本质上来看epoll就是一个改善了的select和poll,本质没发生任何变化,对于构 ...
- CentOS6(CentOS7)设置静态IP 并且 能够上网
链接原文:https://blog.csdn.net/u012453843/article/details/52839105 第一步:在网络连接下有VMnet1和VMnet8两个连接,其中VMnet1 ...
- oracle调试存储过程不进去
右击存储过程,选中Add debug information即可
- 【noip2017】【Luogu3960】列队 线段树
题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的 ...
- 洛谷P2775 机器人路径规划问题
传送门 题解 至今没看懂这深搜怎么写的…… //minamoto #include<iostream> #include<cstdio> #include<cstring ...
- 表单校验--js部分
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 【hadoop】 running beyond virtual memory错误原因及解决办法
问题描述: 在hadoop中运行应用,出现了running beyond virtual memory错误.提示如下: Container [pid=28920,containerID=contain ...
- (C/C++) 基本排序法
C++ Class 宣告 class Sort{ private: void Merge(int *arr, int front, int mid, int end); int Partition(i ...