在Python中浏览文件和子文件夹

时间:2011-04-28 10:31:15

标签: python subdirectory

我想浏览当前文件夹及其所有子文件夹,并获取所有带有.htm | .html扩展名的文件。我发现有可能找出一个对象是dir还是这样的文件:

import os

dirList = os.listdir("./") # current directory
for dir in dirList:
  if os.path.isdir(dir) == True:
    # I don't know how to get into this dir and do the same thing here
  else:
    # I got file and i can regexp if it is .htm|html

最后,我希望将所有文件及其路径放在一个数组中。有可能吗?

6 个答案:

答案 0 :(得分:102)

您可以使用os.walk()递归遍历目录及其所有子目录:

for root, dirs, files in os.walk(path):
    for name in files:
        if name.endswith((".html", ".htm")):
            # whatever

要构建这些名称的列表,您可以使用列表解析:

htmlfiles = [os.path.join(root, name)
             for root, dirs, files in os.walk(path)
             for name in files
             if name.endswith((".html", ".htm"))]

答案 1 :(得分:5)

我有类似的事情要做,这就是我的工作方式。

def start_suitesetup(self, name, attributes):
    ....
    ....
    test = TestCase(name=name,
                    description=description,
                    start=now(),
                    attachments=[],
                    labels=[],
                    parameters=[],
                    steps=[],
                    severity='')

希望这会有所帮助。

答案 2 :(得分:3)

使用newDirName = os.path.abspath(dir)为子目录创建完整的目录路径名,然后像完成父项一样列出其内容(即newDirList = os.listDir(newDirName)

您可以创建代码段的单独方法,并通过子目录结构递归调用它。第一个参数是目录路径名。这将针对每个子目录进行更改。

这个答案基于Python库的3.1.1版本文档。在Python 3.1.1库参考(第10章 - 文件和目录访问)的第228页上有一个很好的模型示例。 祝你好运!

答案 3 :(得分:0)

Sven Marnach的解决方案略有改动......


import os

folder_location = 'C:\SomeFolderName' file_list = create_file_list(folder_location)

def create_file_list(path): return_list = []

for filenames in os.walk(path): for file_list in filenames: for file_name in file_list: if file_name.endswith((".txt")): return_list.append(file_name) return return_list

答案 4 :(得分:0)

在python 3中,您可以使用os.scandir():

for i in os.scandir(path):
    if i.is_file():
        print('File: ' + i.path)
    elif i.is_dir():
        print('Folder: ' + i.path)

答案 5 :(得分:0)

from tkinter import *
import os

root = Tk()
file = filedialog.askdirectory()
changed_dir = os.listdir(file)
print(changed_dir)
root.mainloop()