`

diff 更新 检查脚本

阅读更多
工作中常需要对某些数据文件进行更新检查, 特写了个小脚本来完成.

#!/usr/bin/env python
# encoding: utf-8

"""
@filename   : diff_check.py
@Author     : idup2x@gmail.com
"""

import sys, getopt

_a_nums = 0
_c_nums = 0
_d_nums = 0

def _handle_a(line):
    global _a_nums
    _l = line.split('a')
    if len(_l) > 1:
        _ll = _l[1].split(',')
        if len(_ll) > 1:
            _a_nums = _a_nums + int(_ll[1]) - int(_ll[0]) + 1
        else:
            _a_nums = _a_nums + 1
    else:
        print 'bad a is catched'

def _handle_d(line):
    global _d_nums
    _l = line.split('d')
    if len(_l) > 1:
        _ll = _l[0].split(',')
        if len(_ll) > 1:
            _d_nums = _d_nums + int(_ll[1]) - int(_ll[0]) + 1
        else:
            _d_nums = _d_nums + 1
    else:
        print 'bad d is catched'

def _handle_c_c(line):
    _l = line.split(',')
    if len(_l) > 1:
        _cnt = int(_l[1]) - int(_l[0]) + 1
        return _cnt
    else:
        return 1

def _handle_c(line):
    global _c_nums
    _l = line.split('c')
    if len(_l) > 1:
        _d0 = _handle_c_c(_l[0])
        _d1 = _handle_c_c(_l[1])
        if _d0 >= _d1:
            _c_nums = _c_nums + _d0
        else:
            _c_nums = _c_nums + _d1
    else:
        print 'bad c is catched'

def _main():
    global input_file_name
    _rf = open(input_file_name, "r")
    while 1:
        line = _rf.readline()
        if not line:
            break
        if -1 != line.find('a'):
            _handle_a(line)
        elif -1 != line.find('d'):
            _handle_d(line)
        elif -1 != line.find('c'):
            _handle_c(line)
    _rf.close()

def _usage():
    print "./check_change.py -i inputfile.diff"

def _check_opt():
    global input_file_name
    opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
    if ( len(sys.argv) < 2 ):
        _usage()
        sys.exit()
    for op, value in opts:
        if op == "-i":
            input_file_name = value
        elif op == "-h":
            _usage()
            sys.exit()
        else:
            _usage()
            sys.exit()


if __name__ == "__main__":
    input_file_name = "file.diff"
    _check_opt()
    _main()
    print '增加:', _a_nums
    print '删除:', _d_nums
    print '更新:', _c_nums
    print '共计:', _a_nums + _d_nums + _c_nums
分享到:
评论

相关推荐

    mysqldiff用法详解.pdf

    `mysqldiff` 提供了一种自动化的方法来解决这个问题,能够生成差异报告或直接生成用于更新数据库的 SQL 脚本。 ### 二、下载安装 `mysqldiff` 是基于 Python 的,因此首先确保系统已安装 Python(这里使用的是 ...

    Windows下的diff,适用于windows10以下任何版本

    在Windows环境下,这个工具可以用于编写批处理脚本,以便自动化地检查文件或代码的变更,这对于开发者和系统管理员来说非常有用。例如,你可以将它集成到UtroEdit、Editplus或Notepad++等文本编辑器中,通过插件或...

    Laravel开发-db-diff

    2. **生成迁移文件**:一旦检测到差异,`db-diff` 可以自动生成相应的Laravel迁移文件,这些文件包含了必要的SQL语句来更新数据库结构。这样,开发者可以通过运行迁移命令将本地环境调整到与远程环境相同的状态,...

    运维脚本

    运维脚本主要用于执行日常的系统管理任务,如监控、备份、更新、故障排查等,通过编写脚本,我们可以将一系列命令组合在一起,形成一个可重复执行的任务流程。 一、脚本语言基础 运维脚本通常使用Shell(如bash、sh...

    sqlserver 2008备份脚本

    - 脚本首先检查数据库的版本是否为SQL Server 2005或更高版本,这是因为备份功能在不同版本之间可能存在差异。 ### 4. 用户权限验证 - 在执行备份之前,脚本会检查当前用户是否具有足够的权限来完成备份操作。如果...

    dos批处理脚本学习

    4. **volatile_compare.bat**:可能涉及到文件或目录的比较,尤其是在不稳定或变化的环境中,比如检查版本差异或同步更新。 5. **compare.bat**:可能是一个通用的文件或文本内容比较的脚本,使用`fc`(文件比较)...

    shell脚本比较两台服务器目录及文件是否一致

    1. **版本控制**:在进行版本更新前,可以使用该脚本来确保生产环境与测试环境的文件一致性,避免因文件差异导致的问题。 2. **部署验证**:在新的服务器部署后,可以使用该脚本来验证新旧服务器的配置文件是否一致...

    自动化运维之用Zabbix+mysql制作 监控SVN主从版本号是否一致的脚本.zip

    我们需要编辑Zabbix Agent的配置文件(通常是`/etc/zabbix/zabbix_agentd.conf`),并在`UserParameters`部分添加一行`UserParameter=svndiff,/path/to/svndiff.sh`,这里的`/path/to/svndiff.sh`是你的脚本路径。...

    diff program

    在实际工作中,`diff`常与其他工具结合使用,如版本控制系统Git中的`git diff`,或者在持续集成系统中检查代码更新。通过熟练掌握`diff`,开发者可以更有效地进行代码审查、版本控制和问题排查。 总结,`diff`是一...

    ARMA_Forecast_Diff_ARMA_预测_ARMA_Forecast_Diff.m_ARMA预测_

    在本案例中,`ARMA_Forecast_Diff.m`是一个MATLAB脚本,用于实现ARMA模型的预测。这个脚本可能包含了以下关键步骤: 1. **数据预处理**:首先,数据需要进行清洗,去除异常值或缺失值,并转化为适合模型的形式,如...

    根据MD5HASH监控LINUX的目录文件的bash脚本

    - **错误处理**:脚本中的错误处理机制相对简单,实际部署时可能需要根据具体环境增加更多的错误检查和日志记录,以提高脚本的健壮性和可维护性。 通过以上解析,我们可以看到,这个bash脚本提供了一种有效的方法来...

    SVN数据库增量备份脚本

    在SVN环境中,这意味着脚本会检查自上一次备份以来哪些文件或目录被修改、添加或删除,并仅备份这些变化。这样,即使频繁备份,所需的存储空间也会相对较小。 描述中提到的“可以进行远程备份”意味着该脚本能够...

    diff-check:提醒检查git diffs生成的内容

    1. **自定义检查规则**:`diff-check`允许用户定义自己的检查脚本,这些脚本可以是任何可执行文件,如Python、Haskell或者Shell脚本。这使得开发者可以根据项目需求定制检查逻辑,例如检查特定的代码风格、函数...

    svn强制添加注释脚本

    这些脚本可以用来检查代码格式、注释完整性、权限控制等,以确保提交符合团队规定。 3. **创建pre-commit脚本** 在SVN服务器的hooks目录下,创建一个名为`pre-commit.bat`或`pre-commit.sh`的脚本,取决于你的操作...

    SQL Server 数据库日常维护脚本 合集

    SET @str = 'D:\DBtext\jgj\DBABak\DiffBak' + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 20), '-', ''), ' ', ''), ':', '') + '.diff'; BACKUP DATABASE [demo] TO DISK = @str WITH DIFFERENTIAL, ...

    前端开源库-snapshot-diff

    4. **集成Jest**:"snapshot-diff" 很可能已经集成了Jest,因此可以直接在Jest的测试脚本中使用,无需额外配置。 5. **提升测试覆盖率**:通过更好地理解和管理快照差异,开发者可以确保更多的代码路径得到测试,...

    diff-pdf-visually:快速检查两个PDF之间是否存在明显的差异

    该脚本检查两个PDF在视觉上是否相同。 所以: 白色背景上的白色文字将被忽略。 将检测到文本的位置,大小或颜色的细微变化。 该程序将忽略由其他版本的PDF生成器或源文档中的无形更改引起的更改。 这与大多数...

    diff_pairs_length_tuning_helper:Altium Designer delphi 脚本可帮助微分对长度调整

    本文将深入探讨一个基于Delphi编程语言的脚本工具——"diff_pairs_length_tuning_helper",这个工具专门用于微分对长度调整,以优化高速数字信号的传输质量。 微分对是高速数字设计中的关键概念,它由两条平行的...

    论坛社区vBulletin v3.0.9.50 NewvBB插件增强包-newvbb30diff.zip

    确保NewvBB插件增强包与当前运行的vBulletin版本兼容,并且更新前检查是否有任何已知的安全问题。同时,插件可能与其他已安装的插件存在冲突,需预先进行测试以避免问题。 6. **功能提升**:通过安装这个增强包,...

Global site tag (gtag.js) - Google Analytics