检查csv.gz文件的完整性

莫明地从一个远程服务器上下载csv.gz文件,可能会因为网络原因,下载的文件不完整,而文件数理又比较多,每个文件压缩包又比较大(大约1GB左右),此时就需要对gz文件的完整性做校验。

方法一

当然最简单且最可靠的办法是gzip -t xxx.csv.gz,不过这个办法很慢。

方法二

 用python实现方法如下:

import os
import gzip

def check_integrity(local_file):
    if local_file.endswith('.gz'):
        with gzip.open(local_file, 'rb') as f:
        try:
            f.seek(-1, os.SEEK_END)
        except:
            return -1
    return 0

注意:这里使用的是gzip.open,所以f.seek()并非普通的seek,而是解压结果中seek,所以有任何不完整的问题,f.seek()就会抛出异常。

注意:测试发现,使用如上python代码,比调用gzip -t命令,要慢近2倍。

方法三

考虑到是因为下载过程中,网络中断导致的网络不完整,有一种速度非常快,但是不一定完全靠谱的判断方法,就是判断文件最末尾是不是\x00结尾,可以一定程度上检查出问题:

def check_integrity(local_file):
    if local_file.endswith('.gz'):
        with open(local_file, 'rb') as f:
        f.seek(-1, os.SEEK_END)
        if f.read() != b'\x00':
            return -1
    return 0

 

发表于 2021年02月12日 17:21   评论:0   阅读:1949  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo