用Python快速拼接文件并获取md5

时间:2011-05-04 14:49:43

标签: python file-io md5

我正在尝试将文件拆分成一块+/- 300千字节的小块。 这对于300兆字节(+/- 1000件)

的文件来说非常慢

我还没有使用任何线程,我不确定是否会让它运行得更快

    cs = 1
    pieces = 1000

    # Open the file
    f = open(self.file, 'rb')
    result = {}

    while cs <= pieces:

        #Filename
        filename = str(cs).zfill(5) + '.split'

        # Generate temporary filename
        tfile = filename

        # Open the temporary file
        w = open(tfile, 'wb')

        # Read the first split
        tdata = f.read(maxsize)

        # Write the data
        w.write(tdata)

        # Close the file
        w.close()

        # Get the hash of this chunk
        result[filename] = self.__md5(tfile)

        cs += 1

这是md5函数:

def __md5(self, f, block_size=2**20):

    f = open(f, 'rb')

    md5 = hashlib.md5()
    while True:
        data = f.read(block_size)
        if not data:
            break
        md5.update(data)
    return md5.hexdigest()

那么有什么方法可以加快速度吗?

1 个答案:

答案 0 :(得分:4)

您正在读取块,将其保存到临时文件,然后读取临时文件并计算其md5。但这是不必要的 - 你可以在块仍在内存中时计算md5。这意味着您不必打开临时文件并阅读它,这应该更快。

另外我建议使用更小的块大小 - 可能是2 ^ 11或2 ^ 12。