关闭

Python 对谷歌协议文件 .proto 文件的生成与处理 (python 命令、查找、替换)

980人阅读 评论(0) 收藏 举报
分类:

工作中,对于简单有序但是频率出现较高的问题,做一个工具对其进行所谓的批处理是能够提升很高的工作效率的,下面是对协议文件的生成 与 处理。
这里我是用了python做了一个脚本,生成可使用的程序使用文件 以及 对文件的响应处理


__author__ = 'xxxxxx'
import os
import codecs
import sys
# import this

class Tools:
    def __init__(self, path):
        self.path = path

    def _replace_file(self, path, old, new):
        fp = codecs.open(path, 'r', 'utf-8')
        data = fp.read()
        data = data.replace(old, new)
        fp.close()
        fp = codecs.open(path, 'w', 'utf-8')
        fp.write(data)
        fp.close()

    def _replace_all_file(self, path, re_file_type, old, new):
        for(path, dirs, files) in os.walk(path):
            for filename in files:
                print filename
                ext = os.path.splitext(filename)[1]
                print ext
                if (ext == re_file_type):
                    self._replace_file(filename, old, new)
                    print "over"


if __name__ == '__main__':
    cur_dir = os.path.dirname(os.path.realpath(__file__))
    os.system("protoc OGGameLogicProtocol.proto --cpp_out=./")
    os.system("protoc OGLordBasicDataPB.proto --cpp_out=./")

    builder = Tools(cur_dir)
    builder._replace_all_file(cur_dir, ".h", "< 2003000", "< 2004000")
    builder._replace_all_file(cur_dir, ".h", "2003000 <", "2004001 <")

这里,看一下入口

首先,我是用 os.system()执行命令,生成程序可用的 .pb.h 和 .pb.cc 文件 (注:这里是生成的 C++代码可用的文件类型)

生成后,使用时发现如下问题:谷歌的版本号跟我使用时用的不一致

#if GOOGLE_PROTOBUF_VERSION < 2003000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please update
#error your headers.
#endif
#if 2003000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers.  Please
#error regenerate this file with a newer version of protoc.
#endif
需要对版本号进行修改,由于我生成的可能是很多个文件,所以手动修改起来比较繁琐,影响心情,所以,python代码实现修改(python很犀利)


添加两个修改方法:

/**
*  @brief  遍历指定路径下的文件
*
*  @param path:遍历文件的路径
*  @param re_file_type:需要处理的文件类型  ".h"  ".txt"  ".cc"  ".cpp"  etc.
*  @param old:需要替换的原来的内容
*  @param new:需要替换的现在的内容
*/
def _replace_all_file(self, path, re_file_type, old, new) :

/**
*  @brief  用于将遍历到的文件进行查找替换
*
*  @param path:遍历文件的路径
*  @param old:需要替换的原来的内容
*  @param new:需要替换的现在的内容
*/
def _replace_file(self, path, old, new) : 

注:protoc 是一个.exe文件,使用时配置一下电脑的环境变量

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Protobuf在Python中的使用

Protobuf在Python中的使用 本文原创自esbat的博客,转载请注明出处 protocol buffer的安装 $ wget http://protobuf.googlecode.com...
  • qinglu000
  • qinglu000
  • 2014-05-28 10:44
  • 23076

protobuf安装使用(python版)

安装protobuf源代码(各种语言实现) https://github.com/google/protobuf 我们只需要python版和protoc(编译proto到各个语言)1、到Pyt...
  • u011704730
  • u011704730
  • 2017-02-23 16:28
  • 2998

protobuf 一个.proto 文件的简单讲解

package tutorial; message Person { required string name = 1; required int32 id = 2; optional ...
  • su_787910081
  • su_787910081
  • 2014-10-25 10:50
  • 1219

protobuf2.5直接批处理生成proto文件

  • 2014-10-25 00:47
  • 8.48MB
  • 下载

python 学习之批处理protobuf转pb

python 学习之批处理protobuf转pb protoc --descriptor_set_out os.getcwd() getpass.getuser() readlines() open...
  • xi_mi_
  • xi_mi_
  • 2017-08-08 18:18
  • 486

.proto文件转.cs的方法

从官方下载protobuf-net
  • AWNUXCVBN
  • AWNUXCVBN
  • 2014-10-24 12:17
  • 3922

c++使用proto文件方法简介

Google Protocol Buffers 简称 Protobuf, 是 Google 公司内部的混合语言数据标准. 它提供一种轻量, 高效的结构化数据存储结构. 简介 为什么要使用proto...
  • lijinqi1987
  • lijinqi1987
  • 2016-07-29 18:17
  • 3974

Protobuf语言指南——.proto文件语法详解

Protobuf语言指南 .proto文件语法详解
  • u014308482
  • u014308482
  • 2016-10-28 17:23
  • 18378

照着例子学习protobuf-python

转自 : http://www.cnblogs.com/adoontheway/p/4059632.html 以下是照着python操作protobuf进行的protobuf-pyt...
  • xiaoxianerqq
  • xiaoxianerqq
  • 2016-09-04 15:13
  • 1747

动态使用proto文件

一般情况下,使用 Protobuf 的人们都会先写好 .proto 文件,再用 Protobuf 编译器生成目标语言所需要的源代码文件。将这些生成的代码和应用程序一起编译。 可是在某且情况下,人们无...
  • y_xianjun
  • y_xianjun
  • 2013-06-13 14:50
  • 4682
    个人资料
    • 访问:54858次
    • 积分:1168
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:15篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论