美文网首页
btc 服务器单进程脚本 2020.7.10.20:14

btc 服务器单进程脚本 2020.7.10.20:14

作者: 程序里的小仙女 | 来源:发表于2020-07-10 20:14 被阅读0次
    # -*- coding: utf-8 -*-
    """
     @Time   : 2020/7/10 17:22 
     @Athor   : LinXiao
     @功能   :
    """
    # ------------------------------
    import json
    import os
    from copy import deepcopy
    from pprint import pprint
    
    from loguru import logger
    
    SAVE_PATH = "/backup/btc/btc_outputList_tx"
    
    def file_path(dirname):
        file_list=[]
        for root, _, files in os.walk(dirname):
            for f in files:
                file_path=os.path.join(root, f)
                file_list.append(file_path)
        # pprint(file_list)
        return file_list
    
    
    
    
    #清洗新的btc
    def get_outputList(tx):
        voutValues=0
        vinValues=0
    
        outputValue=0
        vout=tx["vout"]  # list
        vin=tx["vin"]  # list
        for vi in vin:
            outputList=[]
            if vi['id'] == 'coinbase':
                for vout_data in vout:
    
                    if vout_data["address"] != "":
                        dic={
                            "address": vout_data["address"][0],
                            "value": vout_data["value"]
                        }
                        outputValue=dic["value"]
                        outputList.append(dic)
                        # pprint(f"coinbase  outputList is:  {outputList}")
                        # pprint(f"coinbase  outputValue is:  {outputValue}")
                        # return outputValue, outputList
                        btc_data={
    
                            "outputList": outputList,
                            "voutValues": outputValue,
                            "vinValues": 0,
                            "outputValue": dic["value"],
                            "fee": dic["value"],
                        }
                        # pprint(btc_data)
                        tx.update(btc_data)
                        # pprint(tx)
                        return tx
            else:
                # 判断vin中的地址是否在vout中出现,若出现在vout中,则删除掉vout中的这笔交易
    
                vout1=deepcopy(vout)
                for vi in vin:
                    vinValues+=vi["value"]
                    for vo in vout1:
                        if vi["address"] == vo["address"]:
                            vout1.remove(vo)
    
                for vo1 in vout1:
                    output={
                        "address": vo1["address"][0],
                        "value": vo1["value"]
                    }
                    outputValue+=vo1["value"]
                    outputList.append(output)
    
            for vot in vout:
                voutValues+=vot["value"]
    
            fee=vinValues - voutValues
    
            btc_data={
    
                "outputList": outputList,
                "voutValues": voutValues,
                "vinValues": vinValues,
                "outputValue": outputValue,
                "fee": fee,
            }
            tx.update(btc_data)
            return tx
    
    # 读文件
    def read_in_line(file_path):
        with open(file_path, "r") as f:
            while True:
                line = f.readline()
                if line:
                    yield line
                else:
                    return  # 如果读取到文件末尾,则退出
    
    
    # 存为json文件
    def save_json(tx,path):
        # 先将字典对象转化为可写入文本的字符串
        item=json.dumps(tx)
        try:
            if not os.path.exists(path):
                with open(path, "w", encoding='utf-8') as f:
                    f.write(item + ",\n")
    
            else:
                with open(path, "a", encoding='utf-8') as f:
                    f.write(item + ",\n")
        except Exception as e:
            print(e)
    
    
    def get_btc_data(dirname):
        file_list=file_path(dirname)
        for path in file_list:
    
            with open(path, 'r') as f:
                while True:
                    data=f.readline()
                    if not data:
                        break
                    tx=json.loads(data)
                    btc_data = get_outputList(tx)
                    # save_path = r"D:\Project\etc\Chain-Storage\src\core\test"
                    save_path = SAVE_PATH
                    name = path.split("/")[-1]
    
                    new_path=f"{save_path}/new_{name}"
                    save_json(btc_data,new_path)
            logger.info(f"write {name}  success")
    
    
    
    
    if __name__ == '__main__':
        # dirname=r"D:\Project\etc\Chain-Storage\src\core\test"
        # 241 服务器
        dirname=r"/backup/btc/btc_new_tx"
        # dirname=r"/backup/btc/test"
        get_btc_data(dirname)
    
    

    相关文章

      网友评论

          本文标题:btc 服务器单进程脚本 2020.7.10.20:14

          本文链接:https://www.haomeiwen.com/subject/krvpcktx.html