什么';s是Python的Ruby等价物';s os.walk(路径,自上而下=false)?
这与类似,但我感兴趣的是从树叶中走回目录树,而不是从根中走出来 例如,对于目录结构,如什么';s是Python的Ruby等价物';s os.walk(路径,自上而下=false)?,python,ruby,Python,Ruby,这与类似,但我感兴趣的是从树叶中走回目录树,而不是从根中走出来 例如,对于目录结构,如 /root/ |- A/ |- a.txt |- B/ |- b.txt |- C/ |- c.txt 给定根,我想按以下顺序遍历它 /root/A/A.txt /根/A /root/B/C/C.txt /根目录/B/C /root/B/B.txt /根/B 我需要在遍历过程中替换文件内容并重命名文件和目录,这样就可以改变顺序了。由于目录重命名,从根目录开始不是一个吸引人的选择
/root/
|- A/
|- a.txt
|- B/
|- b.txt
|- C/
|- c.txt
给定根
,我想按以下顺序遍历它
我需要在遍历过程中替换文件内容并重命名文件和目录,这样就可以改变顺序了。由于目录重命名,从根目录开始不是一个吸引人的选择。虽然我最初为此编写了自己的解决方案(包括下面),但我更喜欢的是,它的行为与Python中的os.walk(x,toptdown=false)完全相同 我最初的解决方案如下。它的用法不同于
os.walk()
,因为它生成单独的文件和目录路径,而不是(路径、子目录、文件)
的元组
def bottomup\u path\u walk(dir和block)
文件=[]
细分利率=[]
Dir.glob(File.join(Dir,“*”))。每个do | path_str|
path=Pathname.new(path\u str)
如果path.directory?
自底向上\路径\步行(路径和街区)
subdirs虽然我最初为此编写了自己的解决方案(包括下面),但我更喜欢的是,因为它的行为与Python中的os.walk(x,top-down=false)
完全相同
我最初的解决方案如下。它的用法不同于os.walk()
,因为它生成单独的文件和目录路径,而不是(路径、子目录、文件)
的元组
def bottomup\u path\u walk(dir和block)
文件=[]
细分利率=[]
Dir.glob(File.join(Dir,“*”))。每个do | path_str|
path=Pathname.new(path\u str)
如果path.directory?
自底向上\路径\步行(路径和街区)
subdirs是什么意思?@tadman关于这个问题的公认答案指向Find模块,该模块的文档称其“支持一组文件路径的自上而下遍历”。OP要求的是相反的:自下而上的遍历。如果您只是颠倒所查找内容的列表,它可能会起作用。看情况!这里探讨了几个选项。出于兴趣,如果还有一个包含文本文件的文件夹/root/B/D
,您希望/希望发生什么?您希望从C开始,然后找到同级目录吗?您的意思是吗?@tadman关于这个问题的公认答案指向find模块,该模块的文档说明了这一点“支持自顶向下遍历一组文件路径。”OP要求的是相反的:自底向上遍历。如果你只是颠倒你找到的内容列表,这可能会起作用。这取决于!这里探讨了一些选项。出于兴趣,如果还有一个包含文本文件的文件夹/root/B/D
,你期望/希望发生什么?你希望从C开始,然后找到同级控制器吗Y
def bottomup_path_walk(dir, &block)
files = []
subdirs = []
Dir.glob(File.join(dir, "*")).each do |path_str|
path = Pathname.new(path_str)
if path.directory?
bottomup_path_walk(path, &block)
subdirs << path
elsif path.file?
files << path
end
end
files.each { |f| yield f }
subdirs.each { |d| yield d }
end