ca88手机版登录网页Python3.遍历某文件夹提取特定文件名的实例

批量处理文件时,常需要先遍历某个路径提取特定条件的文件名。这篇写一个暴力遍历但很简洁的方法,真的非常简洁但是非常暴力。

这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子

例子目标是:获得存放遥感数据的文件夹下文件夹名以“_BAD”结尾的文件夹内容。因为该文件下分级很多(年/月/产品类型/),目标文件夹很多且存在在最后一级,手动查看很烦。

在这个例子中,主要会用到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,不会影响原对象

# -*- coding: utf-8 -*-
"""
遍历某路径下所有文件夹,获得特定文件夹下所有文件
很暴力,真的遍历了所有的文件夹
20180124
@author: 墨大宝
"""
import os
TARGETPATH = r'F:\MODIS_DATA'
records = []
for currentDir, _, includedFiles in os.walk(TARGETPATH):
 if not currentDir.endswith('_BAD'): continue
 else:
  records.append(currentDir) # 将以“_BAD”结尾的文件夹名加入records
  records.extend(includedFiles) # 将该文件夹内的文件名列表扩展到records
# 将records写入.txt
txtFile = open(os.path.join(TARGETPATH, '02_04_BAD.txt'), 'w')
txtFile.write(os.linesep.join(records))
txtFile.close()
# 将排序后的records写入.txt
with open(os.path.join(TARGETPATH, '02_04_BAD_SORTED.txt'), 'w') as txtFile:
 txtFile.write('\n'.join(sorted(records)))

 

os.walk()返回Directory tree generator。每次生成格式为(dirpath,
dirnames, filenames)
的tuple,元素依次是当前路径、当前路径下文件夹列表、当前路径下文件名列表。

ca88手机版登录网页Python3.遍历某文件夹提取特定文件名的实例。有了这几个函数后,遍历本地文件就非常简单了,前三个函数不详细说,

list的.append()、.extend()和.sort()方法都是原地修改,sorted()函数不是。

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

将list写入.txt文件时需要把list转为str,直接用str()函数强转会很丑,用换行符连接list每个元素会好看很多。

 

os.path代表系统换行符,windows下为”\r\n”,其他系统多是”\n”。然而无论是用os.path还是”\n”连接列表元素,最后用windows记事本打开都一样换行,但是用vs
code打开的话os.path会多换一行即看上去一行间一行,这里面到底为啥有点说到,可能和Python的write机制有关,暂时不深究(留坑)。

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

关于文件读写,大多数资料推荐with as形式,确实更简洁一点。

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

PS:

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

说os.walk()暴力是因为它真的按照目录树遍历了所给路径中的所有文件夹和文件,文件量大而所要找的文件名少的情况下会慢一些(其实我觉得慢不了多少),用os.listdir()写成递归函数的话执行效率可能会高一些,但是os.walk()逻辑简单好写,各位随意,我干了!

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

以上这篇Python3.遍历某文件夹提取特定文件名的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

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

您可能感兴趣的文章:

  • Python遍历某目录下的所有文件夹与文件路径
  • Python遍历指定文件及文件夹的方法
  • Python遍历目录并批量更换文件名和目录名的方法
  • Python遍历目录的4种方法实例介绍
  • Python遍历文件夹和读写文件的实现方法
  • Python三种遍历文件目录的方法实例代码
  • python遍历文件夹,指定遍历深度与忽略目录的方法

作用: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

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

相关文章