根据 Python 中的随机 16 字符 ASCII 字符串始终确定“1”或“2”

Consistently determine a "1" or a "2" based on a random 16-character ASCII string in Python

使用 Python3,我想根据文件名将文件分发到两个硬盘上。

/mnt/disk1/
/mnt/disk2/

所有文件名都是区分大小写的 16 字符 ascii 字符串(例如 I38A2NPp0OeyMiw9.jpg)。

如何根据文件名将路径平均拆分为/mnt/disk1或/mnt/disk2?理想情况下,我希望能够使用 N 个文件路径。

将字符串(文件名)映射到 1 到 n 之间的整数的函数:

def map_dir(s, n=2):
    import hashlib
    m = hashlib.sha256(s.encode('utf-8'))
    return int(m.hexdigest(), 16)%n+1

示例:

>>> map_dir('example.txt')
1

>>> map_dir('file.csv')
2

检查它是否适用于 100k 个随机字符串和 10 个桶:

import random, string

def randfname(N=8):
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=N))

from collections import Counter
Counter((map_dir(randfname(), n=10) for i in range(100000)))

输出:

Counter({9: 9994,
         2: 10091,
         10: 10078,
         4: 10014,
         3: 9897,
         6: 10143,
         8: 10021,
         7: 9891,
         1: 9919,
         5: 9952})

~10k一个,有效!