简体   繁体   English

你如何使用python遍历目录?

[英]How do you walk through the directories using python?

I have a folder called notes, naturally they will be categorized into folders, and within those folders there will also be sub-folders for sub categories.我有一个文件夹叫做notes,自然会被归类到文件夹中,在这些文件夹中也会有子目录的子文件夹。 Now my problem is I have a function that walks through 3 levels of sub directories:现在我的问题是我有一个遍历 3 个子目录级别的函数:

def obtainFiles(path):
      list_of_files = {}
      for element in os.listdir(path):
          # if the element is an html file then..
          if element[-5:] == ".html":
              list_of_files[element] = path + "/" + element
          else: # element is a folder therefore a category
              category = os.path.join(path, element)
              # go through the category dir
              for element_2 in os.listdir(category):
                  dir_level_2 = os.path.join(path,element + "/" + element_2)
                  if element_2[-5:] == ".html":
                      print "- found file: " + element_2
                      # add the file to the list of files
                      list_of_files[element_2] = dir_level_2
                  elif os.path.isdir(element_2):
                      subcategory = dir_level_2
                      # go through the subcategory dir
                      for element_3 in os.listdir(subcategory):
                          subcategory_path = subcategory + "/" + element_3
                        if subcategory_path[-5:] == ".html":
                            print "- found file: " + element_3
                            list_of_files[element_3] = subcategory_path
                        else:
                            for element_4 in os.listdir(subcategory_path):
                                 print "- found file:" + element_4

Note that this is still very much a work in progress.请注意,这仍然是一项正在进行的工作。 Its very ugly in my eyes... What I am trying to achieve here is to go through all the folders and sub folders down and put all the file names in a dictionary called "list_of_files", the name as "key", and the full path as "value".在我看来它非常丑陋......我在这里试图实现的是遍历所有文件夹和子文件夹并将所有文件名放入名为“list_of_files”的字典中,名称为“key”,并且完整路径作为“值”。 The function doesn't quite work just yet, but was wondering how would one use the os.walk function to do a similar thing?该函数还不能完全工作,但想知道如何使用 os.walk 函数来做类似的事情?

Thanks谢谢

Based on your short descriptions, something like this should work:根据您的简短描述,这样的事情应该有效:

list_of_files = {}
for (dirpath, dirnames, filenames) in os.walk(path):
    for filename in filenames:
        if filename.endswith('.html'): 
            list_of_files[filename] = os.sep.join([dirpath, filename])

an alternative is to use generator, building on @ig0774's code另一种方法是使用生成器,以@ig0774 的代码为基础

import os
def walk_through_files(path, file_extension='.html'):
   for (dirpath, dirnames, filenames) in os.walk(path):
      for filename in filenames:
         if filename.endswith(file_extension): 
            yield os.path.join(dirpath, filename)

and then进而

for fname in walk_through_files():
    print(fname)

I've come across this question multiple times, and none of the answers satisfy me - so createda script for that .我多次遇到过这个问题,但没有一个答案让我满意 - 所以为此创建了一个脚本 Python is very cumbersome to use when it comes to walking through directories.在遍历目录时,Python 使用起来非常麻烦。

Here's how it can be used:以下是它的使用方法:

import file_walker


for f in file_walker.walk("/a/path"):
     print(f.name, f.full_path) # Name is without extension
     if f.isDirectory: # Check if object is directory
         for sub_f in f.walk(): # Easily walk on new levels
             if sub_f.isFile: # Check if object is file (= !isDirectory)
                 print(sub_f.extension) # Print file extension
                 with sub_f.open("r") as open_f: # Easily open file
                     print(open_f.read())
                
            

You could do this:你可以这样做:

list_of_files = dict([ (file, os.sep.join((dir, file)))
                       for (dir,dirs,files) in os.walk(path)
                       for file in files
                       if file[-5:] == '.html' ])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 python 浏览 ADLS 文件夹? - How to walk through ADLS folder using python? 您如何遍历使用Python的elmenttree模块解析的Element树? - How do you walk an Element tree parsed using Python's elmenttree module? 如何在 os walk Python 2.7 中跳过目录 - How to skip directories in os walk Python 2.7 在给定某些约束的情况下,如何使用 Python 遍历目录中的文件和 output 和 pandas 数据框? - How can I use Python to walk through files in directories and output a pandas data frame given certain constraints? Python-Os.walk遍历不同驱动器中的目录列表 - Python - Os.walk loop through list of directories in different drives 使用os.walk()时如何排除目录? 其他方法无效 - How do I exclude directories when using os.walk()? Other methods haven't worked 如何使用Pathlib在Python中遍历目录 - How to iterate through directories in Python using Pathlib 您如何通过存在于许多不同目录中的代码进行搜索? - How do you grep through code that lives in many different directories? 如何遍历 python 目录并在 root 处停止一次 - How can you loop through python directories and stop once at root 使用os.walk()递归遍历Python中的目录 - Using os.walk() to recursively traverse directories in Python
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM