python怎么用递归遍历多层目录树

python怎么用递归遍历多层目录树,第1张

Python实现递归遍历指定文件目录(startdir),从而找到所有与指定的文件或目录(target)名相同的文件或目录的绝对路径

scandirpy :

#! /usr/bin/python

# filename : scandirpy

# author : Jesse

# update : 2011/08/15 10:16

import os

def scandir(startdir, target) :

oschdir(startdir)

for obj in oslistdir(oscurdir) :

if obj == target :

print osgetcwd() + ossep + obj

if ospathisdir(obj) :

scandir(obj, target)

oschdir(ospardir) #!!!

startdir = raw_input('Please input startdir: ')

target = raw_input('Please input target: ')

scandir(startdir, target)

关于该程序的一点说明:

1 函数scandir的形参target可以是目录名也可以是文件名。

2 函数chdir的作用是切换到指定目录,该参数必须是有效的且有访问权限的相对路径或绝对路径。

3 函数的第五行,使用getcwd函数也是为了取得当前绝对路径。

4 加号作为字符串的连接符。ossep根据你的 *** 作系统给出目录分隔符,在GNU/Linux和UNIX上它的返回值是'/',在windows上它的返回值是'\\',在Mac OS上是‘:’,使用ossep而不直接使用字符,会提高程序的可移植性。

5 递归调用后,一定不能忘了oschdir(ospardir),返回上层目录(即父目录)。

重要:

1 理解for中的两个并列的if语句,并列是为了解决目标是文件夹时,该目标文件夹中包含符合要求的文件夹。

2 如果指定目录中存在访问受限的文件或文件夹,该程序会失败,返回无权访问信息。

>

os模块

osgetcwd() # 获取当前工作目录,即当前python脚本工作的目录路径

oschdir("dirname") # 改变当前脚本工作目录;相当于shell下cd

oscurdir # 返回当前目录: ('')

ospardir # 获取当前目录的父目录字符串名:('')

osmakedirs('dirname1/dirname2') # 可生成多层递归目录

osremovedirs('dirname1') # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

osmkdir('dirname') # 生成单级目录;相当于shell中mkdir dirname

osrmdir('dirname') # # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

oslistdir('dirname') # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

osremove() # 删除一个文件

osrename("oldname","newname") # 重命名文件/目录

osstat('path/filename') # 获取文件/目录信息

ossep # 输出 *** 作系统特定的路径分隔符,win下为"\\",Linux下为"/"

oslinesep # 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

ospathsep # 输出用于分割文件路径的字符串 win下为;,Linux下为:

osname # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

ossystem("bash command") # 运行shell命令,直接显示

osenviron # 获取系统环境变量

ospathabspath(path) # 返回path规范化的绝对路径

ospathsplit(path) # 将path分割成目录和文件名二元组返回

ospathdirname(path) # 返回path的目录。其实就是ospathsplit(path)的第一个元素

ospathbasename(path) #

返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即ospathsplit(path)的第二个元素

ospathexists(path) # 如果path存在,返回True;如果path不存在,返回False

ospathisabs(path) # 如果path是绝对路径,返回True

ospathisfile(path) # 如果path是一个存在的文件,返回True。否则返回False

ospathisdir(path) # 如果path是一个存在的目录,则返回True。否则返回False

ospathjoin(path1[, path2[, ]]) # 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

ospathgetatime(path) # 返回path所指向的文件或者目录的最后访问时间

ospathgetmtime(path) # 返回path所指向的文件或者目录的最后修改时间

ospathgetsize(path) # 返回path的大小

sys模块

sysargv # 命令行参数List,第一个元素是程序本身路径

sysexit(n) # 退出程序,正常退出时exit(0)

sysversion # 获取Python解释程序的版本信息

sysmaxint # 最大的Int值

syspath # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

sysplatform # 返回 *** 作系统平台名称

datetime模块

datetimetoday()返回一个表示当前本期日期时间的datetime对象

datetimenow([tz])返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上

datetimeutcnow()返回当前utc日期时间的datetime对象

datetimefromtimestamp(timestamp[, tz])根据指定的时间戳创建一个datetime对象

datetimeutcfromtimestamp(timestamp)根据指定的时间戳创建一个datetime对象

datetimestrptime(date_str, format)将时间字符串转换为datetime对象

这是因为路径里面包含中文的原因:

linux的系统字符编码默认为utf-8,而要搜索的文件路径nameFile是Unicode,需要进行解码成unicode,因此作如下修改:

fout = codecsopen(nameFileencode("utf-8") , "w" , "utf-8"

当然,另外一种方法就是修改为英文的路径;

关于编码和解码的知识,请参考:>

调用同级目录下的模块是比较简单的,直接用import。

设同一目录下有两个脚本 apy bpy,在b里调用a的函数func,则bpy代码如下:

import a

afun()

就可以了

具体方法如下:

1,我们在F:\Code文件夹下面创建一个test文件夹,而test文件夹里面如下:

2,包含两个子目录,apy和bpy。

3,如果想要从父目路testpy调用a和b,如何cpy想要调用另一个文件夹的a的话,需要加上syspathapend。

ospardir- 路径组件,意味着将目录树向上遍历一级(例如,“ ”)。

ospath 函数可用于将表示文件名的字符串解析为其组成部分。重要的是要意识到这些功能不依赖于实际存在的路径。路径解析取决于以下定义的一些 os 变量:

1、ossep- 路径部分之间的分隔符。

2、osextsep- 文件名和文件“扩展名”之间的分隔符(例如,“ ”)。

3、oscurdir- 引用当前目录的路径组件(例如,“ ”)。

扩展资料

osgetcwd(): 获取当前工作目录,即当前python脚本工作的目录路径。

oschdir("dirname") :改变当前脚本工作目录;相当于shell下cd。

oscurdir 返回当前目录: ('')。

ospardir 获取当前目录的父目录字符串名:('')。

osmakedirs('dirname1/dirname2') :可生成多层递归目录。

osremovedirs('dirname1'): 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推。

以上就是关于python怎么用递归遍历多层目录树全部的内容,包括:python怎么用递归遍历多层目录树、python有哪些模块、读取python遍历中文目录得到的文件路径报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9422804.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存