Dav*_*542 3 python md5 cryptography
我目前正在获得md5校验和,如下所示:
>>> import hashlib
>>> f = open(file)
>>> m = hashlib.md5()
>>> m.update(f.read())
>>> checksum = m.hedxigest()
Run Code Online (Sandbox Code Playgroud)
我需要返回大型视频文件的校验和,这需要几分钟才能生成.如何实现百分比计数器,以便在运行时打印每个百分比的完成百分比.就像是:
>>> checksum = m.hedxigest()
1% done...
2% done...
etc.
Run Code Online (Sandbox Code Playgroud)
您可以update()重复调用该方法并将文件以块的形式提供给它.因此,您可以自己显示进度.
import hashlib
import os
def digest_with_progress(filename, chunk_size):
read_size = 0
last_percent_done = 0
digest = hashlib.md5()
total_size = os.path.getsize(filename)
data = True
f = open(filename)
while data:
# Read and update digest.
data = f.read(chunk_size)
read_size += len(data)
digest.update(data)
# Calculate progress.
percent_done = 100 * read_size / total_size
if percent_done > last_percent_done:
print '%d%% done' % percent_done
last_percent_done = percent_done
f.close()
return digest.hexdigest()
Run Code Online (Sandbox Code Playgroud)
当我尝试print digest_with_progress('/bin/bash', 1024)这是我得到的:
1% done
2% done
3% done
4% done
5% done
6% done
7% done
8% done
9% done
10% done
11% done
12% done
13% done
14% done
15% done
16% done
17% done
18% done
19% done
20% done
21% done
22% done
23% done
24% done
25% done
26% done
27% done
28% done
29% done
30% done
31% done
32% done
33% done
34% done
35% done
36% done
37% done
38% done
39% done
40% done
41% done
42% done
43% done
44% done
45% done
46% done
47% done
48% done
49% done
50% done
51% done
52% done
53% done
54% done
55% done
56% done
57% done
58% done
59% done
60% done
61% done
62% done
63% done
64% done
65% done
66% done
67% done
68% done
69% done
70% done
71% done
72% done
73% done
74% done
75% done
76% done
77% done
78% done
79% done
80% done
81% done
82% done
83% done
84% done
85% done
86% done
87% done
88% done
89% done
90% done
91% done
92% done
93% done
94% done
95% done
96% done
97% done
98% done
99% done
100% done
b114ecaab65bc5b02f5a129bd29d1864
Run Code Online (Sandbox Code Playgroud)
以下是此文件的实际详细信息.
$ ls -l /bin/bash; md5sum /bin/bash
-rwxr-xr-x 1 root root 971384 Nov 30 16:31 /bin/bash
b114ecaab65bc5b02f5a129bd29d1864 /bin/bash
Run Code Online (Sandbox Code Playgroud)
请注意,如果chunk_size过大,则无法获得预期的输出.例如,如果我们读取100 KB块而不是1 KB块/bin/bash,这就是你所看到的.
10% done
21% done
31% done
42% done
52% done
63% done
73% done
84% done
94% done
100% done
b114ecaab65bc5b02f5a129bd29d1864
Run Code Online (Sandbox Code Playgroud)
这种方法的局限性在于我们只有在读取了摘要后才计算进度.因此,如果块大小太大,每次读取块并更新摘要时,进度中的百分比差异将超过1%.更大的块大小可以更快地完成工作.因此,您可能希望放宽每个百分比的打印百分比完成条件,以提高效率.
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |