用于快速重复文件搜索的缓存

时间:2017-11-09 09:44:12

标签: python caching scandir

我有一个磁盘阵列,其中包含几个TB组织不良的文件。

python程序需要按名称访问文件,每次进行完整搜索都非常耗时。

我所做的是在文件上构建缓存并搜索缓存。

当前代码如下:

pickle_file = 'fscopy.pickle'
if os.path.exists(pickle_file):
    # fscopy = pickle.load(pickle_file)
    with open(pickle_file, 'r') as infil:
        fscopy = json.load(infil)
else:
    # extl = {'mp3', 'PDF', 'prc', 'docx', 'txt', 'jpg', 'cue', 'pdf', 'zip', 'iso', 'nfo', 'odt', '7z', 'azw3', 'djvu',
    #         'lit', 'Pdf', 'rtf', 'bin', 'wv', 'doc', 'chm', 'RAR', 'epub', 'pdF', 'gz', 'cbz', 'cbr', 'rar', 'mobi',
    #         ' odt rar', 'ZIP'}
    extl = {'.PDF', '.zip', '.7z', '.Pdf', '.wv', '.RAR', '.epub', '.pdF', '.gz', '.rar', '.mobi', '.ZIP'}
    fscopy = list()


    def walk(r):
        for r, dl, fl in os.walk(r):
            gfl = list()
            for file in fl:
                _, e = os.path.splitext(file)
                if e in extl:
                    gfl.append(file)
            if len(gfl) > 0:
                fscopy.append((r, gfl))
            else:
                pass

    walk('/srv/store')
    walk('/srv/private')

    # pickle.dump(pickle_file, fscopy)
    with open(pickle_file, 'w') as outfil:
        json.dump(fscopy, outfil, indent=4)


def ffind(f):
    for root, fl in fscopy:
        if f in fl:
            return os.path.join(root, f)
    return None

我想知道是否有更好的方法(或者一些预先构建的lib)。

0 个答案:

没有答案