如何在使用 os.walk() 时仅扫描某些目录或排除目录
How to scan only some directories or exclude directories while using os.walk()
我需要在使用 os.walk() 时排除一些目录或只扫描其中的一些目录。我正在尝试获取最新的文件。我从 this post but it only return back one file. For my project I would need a list of 5 or more recent files. From this post 那里学会了如何做到这一点,它显示了如何只扫描几个目录,但我不知道如何在第一个 post 答案中实现它:
这是我的文件布局:
MainFile(CurrentOne)
|
|-- Projects(the one I am scanning)
#the following folders all have images in them but they are created at the same time as the folder
|-- Folder 1
|
|-- Folder 2
|
|-- Folder 3
|
|-- etc...
我之前的做法是:
我无法显示代码,因为我已经删除了那段代码,但我可以解释一下:
首先: 我首先使用 os.listdir(Projects)
获取文件夹中的目录列表
其次:我会检查我是否有大于5或小于或等于5
第三: 我会进入每个文件夹(我在第一次操作中将它们放入列表中)并使用 stats = os.stat(dirname)
获取有关它的信息。
第四: 我把所有的信息放在一个列表中 recent.insert(0, stats[8]
)
最后:我会比较所有的时间并得到其中的 5 个,但它们都是不正确的。
编辑
获得最近修改的文件后,我希望将该目录排除在扫描范围之外或仅扫描其他目录。例如假装文件夹 1 最近被修改并且 python 显示 folder 1
。然后我想在扫描第二个最近修改的目录时排除该目录
阅读@tripleee 的评论后,我制作了这段获取最近修改的文件的代码。
import os
os.chdir('Folder')
projloc = os.getcwd() #getting the folder to scan
list_of_dirs_to_exclude = []
def get_recent_files():
max_mtime = 0
for root, dirs, files in os.walk(projloc):
if root not in list_of_dirs_to_exclude: # I have made a change by adding the `not` in unlike @tripleee's answer
for fname in files:
full_path = os.path.join(root, fname)
mtime = os.stat(full_path).st_mtime
if mtime > max_mtime:
max_mtime = mtime
max_dir = root
max_file = fname
list_of_dirs_to_exclude.insert(0, max_dir)
print(max_file)
if len(list_of_dirs_to_exclude) == 5: #You can keep whatever number you want such as 6, 7, 4 etc...
pass
else:
get_recent_files()
get_recent_files()
如果您希望所有代码都在同一个def
中,这里是更新的代码
def get_recent_files():
list_of_dirs_to_exclude = []
list_of_dirs = []
max_mtime = 0
for dirs in os.listdir(projloc): #projloc is predefined for me. I got it using the same method in the above code
list_of_dirs.insert(0, dirs)
while len(list_of_dirs) != 5:
for root, dirs, files in os.walk(projloc):
if root not in list_of_dirs_to_exclude:
for fname in files:
full_path = os.path.join(root, fname)
mtime = os.stat(full_path).st_mtime
if mtime > max_mtime:
max_mtime = mtime
max_dir = root
max_file = fname
list_of_dirs_to_exclude.insert(0, max_dir)
print(max_file)
max_mtime = 0
if len(list_of_dirs_to_exclude) == 5:
break
我需要在使用 os.walk() 时排除一些目录或只扫描其中的一些目录。我正在尝试获取最新的文件。我从 this post but it only return back one file. For my project I would need a list of 5 or more recent files. From this post 那里学会了如何做到这一点,它显示了如何只扫描几个目录,但我不知道如何在第一个 post 答案中实现它:
这是我的文件布局:
MainFile(CurrentOne)
|
|-- Projects(the one I am scanning)
#the following folders all have images in them but they are created at the same time as the folder
|-- Folder 1
|
|-- Folder 2
|
|-- Folder 3
|
|-- etc...
我之前的做法是:
我无法显示代码,因为我已经删除了那段代码,但我可以解释一下:
首先: 我首先使用 os.listdir(Projects)
其次:我会检查我是否有大于5或小于或等于5
第三: 我会进入每个文件夹(我在第一次操作中将它们放入列表中)并使用 stats = os.stat(dirname)
获取有关它的信息。
第四: 我把所有的信息放在一个列表中 recent.insert(0, stats[8]
)
最后:我会比较所有的时间并得到其中的 5 个,但它们都是不正确的。
编辑
获得最近修改的文件后,我希望将该目录排除在扫描范围之外或仅扫描其他目录。例如假装文件夹 1 最近被修改并且 python 显示 folder 1
。然后我想在扫描第二个最近修改的目录时排除该目录
阅读@tripleee 的评论后,我制作了这段获取最近修改的文件的代码。
import os
os.chdir('Folder')
projloc = os.getcwd() #getting the folder to scan
list_of_dirs_to_exclude = []
def get_recent_files():
max_mtime = 0
for root, dirs, files in os.walk(projloc):
if root not in list_of_dirs_to_exclude: # I have made a change by adding the `not` in unlike @tripleee's answer
for fname in files:
full_path = os.path.join(root, fname)
mtime = os.stat(full_path).st_mtime
if mtime > max_mtime:
max_mtime = mtime
max_dir = root
max_file = fname
list_of_dirs_to_exclude.insert(0, max_dir)
print(max_file)
if len(list_of_dirs_to_exclude) == 5: #You can keep whatever number you want such as 6, 7, 4 etc...
pass
else:
get_recent_files()
get_recent_files()
如果您希望所有代码都在同一个def
def get_recent_files():
list_of_dirs_to_exclude = []
list_of_dirs = []
max_mtime = 0
for dirs in os.listdir(projloc): #projloc is predefined for me. I got it using the same method in the above code
list_of_dirs.insert(0, dirs)
while len(list_of_dirs) != 5:
for root, dirs, files in os.walk(projloc):
if root not in list_of_dirs_to_exclude:
for fname in files:
full_path = os.path.join(root, fname)
mtime = os.stat(full_path).st_mtime
if mtime > max_mtime:
max_mtime = mtime
max_dir = root
max_file = fname
list_of_dirs_to_exclude.insert(0, max_dir)
print(max_file)
max_mtime = 0
if len(list_of_dirs_to_exclude) == 5:
break