Pythonの辞書の使用

シナリオ:
そこA(parsed_pvlog)B(pdetail)は、2つのファイル
A.uuid == B.uuid、1つのフィールド(cpssrc)にファイルAがファイルBのに加え

方法
AB完全な行は、ファイル・フィールドを読み取ります値として辞書に。ネストされた2つの辞書。{のUu値:スイッチ辞書}} {線
AのKVを横切る、db.get(K)であれば、DB [K] [ 'cpssrc'] = v.get( 'cpssrc'、 '')
ABにそれぞれメモリの比較的多数のdict、そして最終的にKVを横切る

方法2:
辞書KVS = parse_logstr_to_dict(線)であるファイルの各行を変換するかのキーとしてUUID kvs.get(「cpssrc」、「」)の値userCpsとして辞書に値cpssrc値
userCpsからキーを取得する、UUID UUID得られた値に対応する、辞書KVS = parse_logstr_to_dict(ライン)にファイルBの各行を横断はUUID値結合は、元のファイルB cpssrc配置されます辞書のKVSの各行
メモリのみそう辞書ファイル、Bダイレクト・アクセス・ファイル(「cpssrc値」のUUID値)userCps、各ラインは、現在の変換辞書を取るために添加しました
#coding=utf-8

import os
import sys
from datetime import datetime, timedelta

reload(sys)
sys.setdefaultencoding('utf8')

#解析日志为字典,输入k1=v1 \t k2=v2 \t k3=v3 \t ...
def parse_logstr_to_dict(logstr,rdsp = '\t'):
    log_dict = {}
    kvs = logstr.strip('\n').split(rdsp)
    for kv in kvs:
        pos = kv.find('=')
        if pos < 0 : continue
        k = kv[0:pos]
        v = kv[pos+1:]
        log_dict[k] = v
    return log_dict

#将字典转为list
def trans_dict_2_logstr( log_dict, rdsp='\t' ):
    result = []
    for k in log_dict:
        result.append( '%s=%s' % (k, log_dict[k]) )
    return rdsp.join( result )


def add_cpssrc_to_pdetail(log1,log2,outFile):
    f = open(outFile, "w")
    for line2 in open(log2): #遍历b文件的每一行
        for line1 in open(log1):#遍历a文件的每一行
            line1Dict=parse_logstr_to_dict(line1)
            if(line2.find(line1Dict['uu'])>=0):
                line2=line2.strip("\n")+"\t"+"cpssrc="+line1Dict['cpssrc']+"\n"
                f.writelines(line2)
                continue
    f.close()
# add_cpssrc_to_pdetail("c://parsed_pvlog.log","c://pdetail.log","c://hello.log")

# 方法一
def load(log1,log2,outFile):
    f = open(outFile, "w")
    f1=open(log1)
    f2=open(log2)
    da={}
    db={}
    for s in f1: #加载A//uu为k,一行全字段字典作为值。两层dict嵌套。{uu的值:{一行转为dict}},大dict中嵌套小dict
        myd=parse_logstr_to_dict(s)
        da[myd['uu']]=myd
    for s in f2: #加载B//uu为k,值一行全字段字典
        myd = parse_logstr_to_dict(s)
        db[myd['uu']] = myd
    print 44
    for k, v in da.items():
        if db.get(k):
            db[k]['cpssrc']=v.get('cpssrc','')#['cpssrc']

    for k,v in db.items():
        f.write(trans_dict_2_logstr(v)+"\r\n")
    f.close()
load("c://parsed_pvlog.log", "c://pdetail.log", "c://hello4.log")

# 方法二
#uuid-->cpssrc
pvlog="c://parsed_pvlog.log"
oldPdetailLog="c://pdetail.log"
newPdetailLog="c://my.log"
fw = open(newPdetailLog, "w")
userCps={}
f=open(pvlog)
for line in f:
    kvs=parse_logstr_to_dict(line)
    if kvs.get('cpssrc',''):
        userCps[kvs.get('uu')]=kvs.get('cpssrc')
f.close()

f=open(oldPdetailLog)
for line in f:
    kvs=parse_logstr_to_dict(line)
    uuid=kvs.get('uu','')
    kvs['cpssrc']=userCps.get(uuid,'')
    fw.write(trans_dict_2_logstr(kvs))
    fw.write('\r\n')
fw.close()
f.close()



公開された131元の記事 ウォン称賛79 ビュー310 000 +

おすすめ

転載: blog.csdn.net/qq_31780525/article/details/79223132