
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遍历中文目录得到的文件路径报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)