繁体   English   中英

获取不在隐藏文件夹中的文件

[英]Get files not in hidden folders

测试失败,因为它也从隐藏文件夹中获取文件。 如何修改代码以跳过隐藏文件夹?

看起来帖子主要是代码,但我不知道还能说什么,问题很简单,我要做的就是写更多的文字来解释代码,而不是为什么我还要费心写代码. 在这里复制一个链接会更容易。

def get_files_not_in_hidden_folder(parent_folder: str, extension: str) -> List[str]:
    """
    Get all files recursively from parent folder,
    except for the ones that are in hidden folders
    """
    files = []
    for root, _, filenames in os.walk(parent_folder):
        for filename in filenames:
            if filename.endswith(extension) and not root.startswith('.'):
                files.append(os.path.join(root, filename))
    logger.debug(f"get_files_not_in_hidden_folder: {parent_folder}, {extension} -> {files}")
    return files

def test_get_files_not_in_hidden_folder():
    Path('tmp').mkdir(parents=True, exist_ok=True)
    Path('tmp/test.json').touch()
    Path('tmp/tmp/.tmp').mkdir(parents=True, exist_ok=True)
    Path('tmp/tmp/.tmp/test.json').touch()
    Path('tmp/.tmp/tmp').mkdir(parents=True, exist_ok=True)
    Path('tmp/.tmp/tmp/test.json').touch()

    assert get_files_not_in_hidden_folder('tmp', '.json') == ['tmp/test.json']

    shutil.rmtree(Path('tmp'))

您所说的root是完整路径,包括父名称。

如果您只想转换为目录名称,可以使用os.path.basename ,例如:

    for root, _, filenames in os.walk(parent_folder):
        for filename in filenames:
            if filename.endswith(extension) and "/." not in root:
                files.append(os.path.join(root, filename))

我会像下面这样实现这个......

def my_walk(root_dir):
    files,dirs = [],[]
    try:
        for fname in os.listdir(root_dir):
            if not fname.startswith("."):
               fpath = os.path.join(root_dir,fname)
               if os.path.isdir(fpath):
                  dirs.append(fpath)
               else:
                  files.append(fpath)
    except:
        print("SKIP:",root_dir)
    yield root_dir,dirs,files
    for d in dirs:
        yield from my_walk(d)

    

我认为应该工作...

for root, _, filenames in my_walk(parent_folder):
    print(f"{root} contains {filenames}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM