[英]Listing files and folders recursively in Python
具有如下树结构:
custom_test/
├── 110/
│ ├── 1548785454_CO_[1].txt
├── 120/
│ ├── 1628785454_C4_[1].txt
└── 13031/
│ ├── 1544725454_C2_[1].txt
└── test_results/
│ ├── resulset1.txt
│ ├── hey.txt
script.py <------- this is the script which runs the Python code
我想获取除test_results
之外的所有文件夹的文件和子文件夹(我想忽略这个文件夹)。 使用上面的缩小示例,我想要的 output 是:
['110\\1548785454_CO_[1].txt', '120\\1628785454_C4_[1].txt', '13031\\1544725454_C2_[1].txt']
这是我的尝试,它制作了 output,但它也包括test_results
文件夹中的那些:
deploy_test_path = "custom_test"
print([os.path.join(os.path.basename(os.path.relpath(os.path.join(filename, os.pardir))), os.path.basename(filename)) for filename in glob.iglob(deploy_test_path + '**/**', recursive=True) if os.path.isfile(filename)])
没有列表理解(为了更容易理解):
deploy_test_path = "custom_test"
for filename in glob.iglob(deploy_test_path + '**/**', recursive=True):
if os.path.isfile(filename):
a = os.path.join(os.path.basename(os.path.relpath(os.path.join(filename, os.pardir))), os.path.basename(filename))
print(a)
如何归档我的目标? 我知道我可以从数组中删除test_results
的元素,但是还有更优雅和 Pythonic 的等待这样做吗?
提前致谢
每当我需要操纵路径时,我都会求助于Pathlib 。
这或多或少是我的做法:
from pathlib import Path
dir = Path("custom_test")
files = dir.rglob("*")
res = [f.relative_to(dir) for f in files if not f.match("test_results/*")]
在单行中:
from pathlib import Path
res = [f.relative_to("custom_test") for f in Path("custom_test").rglob("*") if not f.match("test_results/*")]
如果您只需要这些文件,您可以使用rglob("*.*")
代替,或者
dir = Path("custom_test")
res = [f.relative_to(dir) for f in dir.rglob("*") if not f.match("test_results/*") and f.is_file()]
我有同样的情况并做了以下事情:
import os
IGNORE_FOLDERS = ("test_results",".git")` #as many folders as you need to ignore
def get_data():
root, dirnames, filenames = next(os.walk(file_path))
for dirname in (d for d in dirnames if d not in IGNORE_FOLDERS):
print(filenames) # or save them to a variable if you like
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.