Python以二进制形式读取数据
我希望以二进制形式读入日志数据,然后在第二个for循环中解析二进制输出,就像它是针对字符串而不是二进制一样。这可能吗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
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
)?