使用 os.walk 排除根目录
Exclude root directories using os.walk
我正在尝试列出笔记本电脑的所有文件,但我想排除一些根目录。
例如:
我有以下文件:
/Users/teste/demo/file.csv
/Users/teste/demo3/file.csv
/Users/project/file.csv
我想要的是排除/Users/teste/
中的所有文件。为此,我有这个代码:
import os
exclude = ['/Users/teste/',]
for root, dirs, files in os.walk("\", topdown=False):
if root not in exclude:
for name in files:
print(name)
但是,我的代码正在打印目录 demo 和 demo3 中的文件,因为根目录包含演示部分。如果我打印根,我将得到:
/Users/teste/demo
/Users/teste/demo3
/Users/project/
我只想包含 /Users/project/file.csv
文件
如何使用父根进行过滤?
您可以将 startswith
与 tuple
一起使用(不是列表)
if not root.startswith( ('/Users/teste/', '/other/folder') ):
import os
exclude = ['/Users/teste/',]
exclude = tuple(exclude)
for root, dirs, files in os.walk("\", topdown=False):
if not root.startswith(exclude):
for name in files:
print(name)
顺便说一句:
如果你想使用无法获取列表或元组的函数,那么你可以使用 any()
和列表理解来检查列表中的所有元素
例如 startswith()
if not any(root.startswith(x) for x in exclude):
or for regex
(这对于在 exclude
中创建更复杂的元素很有用)
if not any(re.findall(x, root) for x in exclude):
我正在尝试列出笔记本电脑的所有文件,但我想排除一些根目录。
例如: 我有以下文件:
/Users/teste/demo/file.csv
/Users/teste/demo3/file.csv
/Users/project/file.csv
我想要的是排除/Users/teste/
中的所有文件。为此,我有这个代码:
import os
exclude = ['/Users/teste/',]
for root, dirs, files in os.walk("\", topdown=False):
if root not in exclude:
for name in files:
print(name)
但是,我的代码正在打印目录 demo 和 demo3 中的文件,因为根目录包含演示部分。如果我打印根,我将得到:
/Users/teste/demo
/Users/teste/demo3
/Users/project/
我只想包含 /Users/project/file.csv
文件
如何使用父根进行过滤?
您可以将 startswith
与 tuple
一起使用(不是列表)
if not root.startswith( ('/Users/teste/', '/other/folder') ):
import os
exclude = ['/Users/teste/',]
exclude = tuple(exclude)
for root, dirs, files in os.walk("\", topdown=False):
if not root.startswith(exclude):
for name in files:
print(name)
顺便说一句:
如果你想使用无法获取列表或元组的函数,那么你可以使用 any()
和列表理解来检查列表中的所有元素
例如 startswith()
if not any(root.startswith(x) for x in exclude):
or for regex
(这对于在 exclude
中创建更复杂的元素很有用)
if not any(re.findall(x, root) for x in exclude):