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

更新时间:2020-03-19    来源:python    手机版     字体:

【www.bbyears.com--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
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遍历文件夹和读写文件的方法

1、读取指定目录下的所有文件
2、读取指定文件,输出文件内容
3、创建一个文件并保存到指定目录

Python写代码简洁高效,实现以上功能仅用了40行左右的代码~ 昨天用Java写了一个写入、创建、复制、重命名文件要将近60行代码;

不过简洁的代价是牺牲了一点点运行速度,但随着硬件性能的提升,运行速度的差异会越来越小,直到人类无法察觉~

#-*- coding: UTF-8 -*-

'''
1、读取指定目录下的所有文件
2、读取指定文件,输出文件内容
3、创建一个文件并保存到指定目录
'''
import os

# 遍历指定目录,显示目录下的所有文件名
def eachFile(filepath):
    pathDir =  os.listdir(filepath)
    for allDir in pathDir:
        child = os.path.join('%s%s' % (filepath, allDir))
        print child.decode('gbk') # .decode('gbk')是解决中文显示乱码问题

# 读取文件内容并打印
def readFile(filename):
    fopen = open(filename, 'r') # r 代表read
    for eachLine in fopen:
        print "读取到得内容如下:",eachLine
    fopen.close()
   
# 输入多行文字,写入指定文件并保存到指定文件夹
def writeFile(filename):
    fopen = open(filename, 'w')
    print "\r请任意输入多行文字"," ( 输入 .号回车保存)"
    while True:
        aLine = raw_input()
        if aLine != ".":
            fopen.write('%s%s' % (aLine, os.linesep))
        else:
            print "文件已保存!"
            break
    fopen.close()

if __name__ == '__main__':
    filePath = "D:\\FileDemo\\Java\\myJava.txt"
    filePathI = "D:\\FileDemo\\Python\\pt.py"
    filePathC = "C:\\"
    eachFile(filePathC)
    readFile(filePath)
    writeFile(filePathI)


本文来源:http://www.bbyears.com/jiaocheng/88190.html

猜你感兴趣

热门标签

更多>>

本类排行