Python以二进制形式读取数据

Python以二进制形式读取数据,python,Python,我希望以二进制形式读入日志数据,然后在第二个for循环中解析二进制输出,就像它是针对字符串而不是二进制一样。这可能吗 logData = open(sys.argv[1]).readlines() processedSources = sys.stdin.readlines() stringDictionary = {} for line in processedSources: # Match data looking for MODULE_ID, LOG_LINE, ARG_COU

我希望以二进制形式读入日志数据,然后在第二个for循环中解析二进制输出,就像它是针对字符串而不是二进制一样。这可能吗

logData = open(sys.argv[1]).readlines()
processedSources = sys.stdin.readlines()

stringDictionary = {}
for line in processedSources:
    # Match data looking for MODULE_ID, LOG_LINE, ARG_COUNT, FILE_NAME, DATA_STRING
    match = re.search("(\d+),\s+(\d+),\s+(\d+),\s+(.*),\s+(\".*\")", line)
    if match:
        moduleId = int(match.group(1))
        logLine = int(match.group(2))
        argCount = int(match.group(3))
        fileName = match.group(4)
        outputString = match.group(5)    
        stringDictionary[(moduleId, logLine)] = [ moduleId, logLine, argCount, fileName, outputString ]
    else:
        print "Failed string dictionary on: " + line

for line in logData:
    # Match data looking for MODULE_ID, LOG_LINE, ARG_COUNT, ARGUMENTS
    matchLogData = re.split("\s+", line)
    if matchLogData:
        moduleId = int(matchLogData[0], 16)
        logLine = int(matchLogData[1], 16)
        argCount = int(matchLogData[2], 16)
        if stringDictionary[(moduleId, logLine)]:
            processedData = stringDictionary[(moduleId, logLine)]
            if argCount != processedData[2]:
                print "Argument count mismatch on : " + line
                print "   expected %d found %d" % (argCount, processedData[2])
            else:
                index = 0
                logString = "%02x:%4d:%s:" + processedData[4]
                logData = (processedData[0], processedData[1], processedData[3])
                while index < argCount:
                    logData = logData + (int(matchLogData[index+3], 16),)
                    index = index + 1
                print logString % logData
        else:
            print "ModuleId:%d Line:%d, not found in source dictionary" % (moduleId, logLine)
            print "   Line data: " + line
    else:
        print "Expected log input data mismatch MODULE_ID LOG_LINE ARG_COUNT ARGS"
        print "Line: " + line
logData=open(sys.argv[1]).readlines()
processedSources=sys.stdin.readlines()
stringDictionary={}
对于processedSources中的行:
#匹配查找模块ID、日志行、参数计数、文件名、数据字符串的数据
匹配=重新搜索((\d+)\s+(\d+)\s+(\d+)\s+(.*),\s+(\“*”),第行)
如果匹配:
moduleId=int(匹配组(1))
对数线=整数(匹配组(2))
argCount=int(匹配组(3))
fileName=match.group(4)
outputString=match.group(5)
stringDictionary[(moduleId,logLine)]=[moduleId,logLine,argCount,fileName,outputString]
其他:
打印“+行上的失败字符串字典”
对于日志数据中的行:
#匹配查找模块ID、日志行、参数计数和参数的数据
matchLogData=re.split(“\s+”,第行)
如果匹配日志数据:
moduleId=int(匹配日志数据[0],16)
logLine=int(匹配logdata[1],16)
argCount=int(匹配日志数据[2],16)
如果stringDictionary[(moduleId,logLine)]:
processedData=stringDictionary[(moduleId,logLine)]
如果argCount!=已处理数据[2]:
打印“+行上的参数计数不匹配”
打印“应为%d找到%d%”(argCount,processedData[2])
其他:
索引=0
logString=“%02x:%4d:%s:+processedData[4]
logData=(processedData[0],processedData[1],processedData[3])
当索引
logData=open(sys.argv[1],“rb”).readlines()显然将输入解释为文本。二进制数据的结构不是行。在循环中使用
read()
。@JoranBeasley:
readlines
对二进制数据几乎没有用处。请指定您使用的是Python 3还是Python 2。这两种语言的处理方式存在一些差异。为什么需要以二进制方式打开日志数据?数据中是否仍有行分隔符(
\n
\r
\n\r
)?