根据 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一个,有效!
使用 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一个,有效!