你如何使用Python遍历目录?

18 浏览
0 Comments

你如何使用Python遍历目录?

我有一个名为notes的文件夹,自然会将它们分类到文件夹中,并在这些文件夹中还会有子文件夹用于子分类。现在我的问题是,我有一个函数可以遍历3层子目录:\n

def obtainFiles(path):
      list_of_files = {}
      for element in os.listdir(path):
          # 如果元素是一个html文件,则..
          if element[-5:] == ".html":
              list_of_files[element] = path + "/" + element
          else: # 元素是一个文件夹,因此是一个分类
              category = os.path.join(path, element)
              # 遍历分类目录
              for element_2 in os.listdir(category):
                  dir_level_2 = os.path.join(path,element + "/" + element_2)
                  if element_2[-5:] == ".html":
                      print "- 找到文件:" + element_2
                      # 将文件添加到文件列表中
                      list_of_files[element_2] = dir_level_2
                  elif os.path.isdir(element_2):
                      subcategory = dir_level_2
                      # 遍历子分类目录
                      for element_3 in os.listdir(subcategory):
                          subcategory_path = subcategory + "/" + element_3
                        if subcategory_path[-5:] == ".html":
                            print "- 找到文件:" + element_3
                            list_of_files[element_3] = subcategory_path
                        else:
                            for element_4 in os.listdir(subcategory_path):
                                 print "- 找到文件:" + element_4

\n请注意,这仍然是一个正在进行中的工作。在我看来非常丑陋...\n我在这里尝试的目标是遍历所有文件夹和子文件夹,并将所有文件名放入一个名为\"list_of_files\"的字典中,名称作为\"键\",完整路径作为\"值\"。这个函数还不太完善,但我想知道如何使用os.walk函数来做类似的事情?\n谢谢

0
0 Comments

Python在处理文件夹遍历时非常繁琐,这导致了这个问题的出现。为了解决这个问题,有人创建了一个名为file_walker的脚本。这个脚本可以帮助我们遍历文件夹。

以下是如何使用这个脚本的示例代码:

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())

通过这个脚本,我们可以轻松地遍历文件夹并获取文件的名称、完整路径、文件扩展名以及文件内容。这大大简化了Python处理文件夹遍历的过程。

0
0 Comments

使用Python遍历目录的问题是,使用普通的循环方式可能会导致代码冗长且不够优雅。因此,我们可以使用生成器来简化代码。

以下是一种使用生成器的方法:

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)

上述代码定义了一个名为`walk_through_files`的函数,它接受一个路径参数和一个文件扩展名参数,并使用`os.walk()`函数遍历该路径下的所有文件。然后,通过生成器`yield`关键字返回满足条件的文件路径。

接下来,我们可以通过以下方式使用这个生成器:

for fname in walk_through_files():
    print(fname)

上述代码中的`for`循环遍历`walk_through_files()`生成器返回的每个文件路径,并将其打印出来。

使用这种方法,我们可以简洁地遍历目录并处理满足特定条件的文件。这不仅使代码更具可读性和可维护性,还提供了更大的灵活性。

0
0 Comments

通过上述的简单描述,可以使用以下代码来实现:

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])

.endswith()是一个更好的解决方案,用于判断一个字符串是否以.html结尾。

0