首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从多个文件夹中获取具有相同相对路径的冲突文件?

如何从多个文件夹中获取具有相同相对路径的冲突文件?
EN

Stack Overflow用户
提问于 2022-09-26 11:48:25
回答 1查看 22关注 0票数 0

我想要建立一个虚拟文件系统从几个文件夹,并希望检查是否有任何冲突的文件。因此,我想提供几个文件夹,并获得与其文件夹路径相同的文件。

我怎么才能找到冲突呢?

这就是我到目前为止所做的。get_filesremove_duplicates并没有像我预期的那样工作。

代码语言:javascript
复制
from glob import glob
import os
from pathlib import Path
import shutil
import sys


def main():
    folders = sys.argv[1:]

    if len(folders) < 2:
        print("Please provide at least 2 folders")
        exit(1)

    files = get_files(folders)
    conflicting_files = find_conflicting_files(files)
    conflicting_files = remove_duplicates(conflicting_files)
    print_conflicting_files(conflicting_files)


def get_files(folders):
    files = []
    for folder in folders:
        files.extend([os.path.relpath(path, folder) for path in Path(folder).rglob("*")])
    return files


def test_get_files():
    try:
        os.makedirs("test/folder1/a", exist_ok=True)
        os.makedirs("test/folder2/b", exist_ok=True)
        open("test/folder1/a/file", "w").close()
        open("test/folder2/b/file", "w").close()

        folders = ["test/folder1", "test/folder2"]
        assert get_files(folders) == ["a/file", "b/file"]
    finally:
        shutil.rmtree("test")


def find_conflicting_files(files) -> list:
    conflicting_files = []
    for file in files[0]:
        for f in files[1:]:
            if file in f:
                conflicting_files.append(file)

    return conflicting_files


def test_find_conflicting_files():
    files = [
        ["a", "b", "c"],
        ["a", "b", "d"],
        ["a", "b", "e"],
        ["a", "b", "f"],
    ]

    assert find_conflicting_files(files) == ["a", "a", "a", "b", "b", "b"]


def remove_duplicates(files):
    return list(set(files))


def test_remove_duplicates():
    files = ["a", "a", "b", "b", "c", "c"]
    assert remove_duplicates(files) == ["a", "b", "c"]


def print_conflicting_files(files):
    for file in files:
        print(file)


if __name__ == "__main__":
    main()
EN

回答 1

Stack Overflow用户

发布于 2022-09-26 12:02:38

试一试(还没有亲自测试):

代码语言:javascript
复制
def find_conflicting_files(files) -> list:
    from collections import Counter
    return [file for file, cnt in Counter(files).items() if cnt > 1) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73853707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档