我需要计算zip文件内容的CRC32,MD5和SHA1而不解压缩它们.
到目前为止,我发现了如何为zip文件本身计算这些,例如:
CRC32:
import zlib
zip_name = "test.zip"
def Crc32Hasher(file_path):
buf_size = 65536
crc32 = 0
with open(file_path, 'rb') as f:
while True:
data = f.read(buf_size)
if not data:
break
crc32 = zlib.crc32(data, crc32)
return format(crc32 & 0xFFFFFFFF, '08x')
print(Crc32Hasher(zip_name))
Run Code Online (Sandbox Code Playgroud)
SHA1 :( MD5同样)
import hashlib
zip_name = "test.zip"
def Sha1Hasher(file_path):
buf_size = 65536
sha1 = hashlib.sha1()
with open(file_path, 'rb') as f:
while True:
data = f.read(buf_size)
if not data:
break
sha1.update(data)
return format(sha1.hexdigest())
print(Sha1Hasher(zip_name))
Run Code Online (Sandbox Code Playgroud)
对于zip文件的内容,我可以直接从zip读取CRC32,无需计算如下:
阅读zip内容的CRC32:
import zipfile
zip_name = …Run Code Online (Sandbox Code Playgroud) 我在文件和文件夹名称上使用感叹号(!)感到困惑。我创建的批处理读取.txt文件的内容,并将列出的文件从文件夹中排序到子文件夹中。
例如:
source.txt有内:file_1.zip与file_2.zip
调用的文件夹system有file_1.zip,file_2.zip,file_3.zip,等,并批量读取source.txt和这两个文件复制到system/source。
我试图避免启用启用DelayedExpansion,但是在添加文件夹浏览器之后,我找不到比使用它更好的方法了。我需要按照显示:listSources和:listFolders的方式启用它。 我现在的问题不是对文件夹名称进行太多处理(!)(尽管允许这样做很不错),但是允许文件副本带有(!)。
我考虑过逃跑^^!字符或在setlocal和endlocal之间切换,但是我仍在学习如何正确使用它,因此不知道如何处理它。也许有更好的方法?(我不是程序员!)
@echo off
setlocal EnableDelayedExpansion
rem Copy sorted files into destination folder? [Y/N]
set "copyMode=y"
if /i "%copyMode%"=="y" (set appendTitle=[Copy Mode]) else set appendTitle=[Log Mode]
rem Set prefix for output file (used only if copyMode=n)
set prefixMiss=missing_in_
rem Set defaults to launch directory
set rootSource=%~dp0
set rootFolder=%~dp0
:listSources …Run Code Online (Sandbox Code Playgroud)