我有Tracelog文件,其中包含一些id和字节。我怎么能把它们放在python中的表中?

时间:2018-04-09 06:43:15

标签: python python-3.x python-2.7

跟踪文件有ID和字节,时间如下:

0.516516 ID1 00 08 07 06 05 04
0.516517 ID2 00 08 07 06 05 05
0.516518 ID3 00 08 07 06 05 06
0.516519 ID4 00 08 07 06 05 07
0.516520 ID1 00 08 07 06 05 08

等......

我想制作像ID1这样的表格,时间数据会随之而来 像

0.516516 ID1 00 08 07 06 05 04
0.516520 ID1 00 08 07 06 06 08

所以需要想法如何实现我尝试了所有的事情列表,但除了列出任何其他方式之外没有找到帮助?

我想查看所有相关的数据,例如:  0.516516 ID1值是00 08 07 06 05 04和时间0.516520 ID1值是00 08 07 06 06 04我想检查我的5字节是否正确递增?

2 个答案:

答案 0 :(得分:0)

要实现这一点,您需要从文件或某个变量中获取值,并根据endline char对它们进行拆分,这将逐行提供一个很好的列表,然后您只需检查当前是否ID1字符串只是附加到我的输出,你就完成了。你也可以为其余的ID做同样的事情。

  以下是从给定数据中过滤ID1行的示例代码。

import re

myValues = """0.516516 ID1 00 08 07 06 05 04\n
0.516517 ID2 00 08 07 06 05 05\n
0.516518 ID3 00 08 07 06 05 06\n
0.516519 ID4 00 08 07 06 05 07\n
0.516520 ID1 00 08 07 06 05 08"""

#get IDs and init IDs dictionary
outs = {}
myIDs = set(re.findall(r'ID\d',myValues))
for ID in myIDs: # iterate for each id and file related date in myValues variable
    outs[ID] = []

for ID in myIDs: # iterate for each id and file related date in myValues variable
    valuesList = myValues.split("\n")
    for values in valuesList :
        if ID in values:
            outs[ID].append(values)
for out_  in outs:
    lengthOfValues = len(outs[out_])
    count = 0
    while count+1 < lengthOfValues:
            bytes1 = int("".join(outs[out_][count].split(out_)[1].split(" ")))
            bytes2 = int("".join(outs[out_][count+1].split(out_)[1].split(" ")))
            time1 = float("".join(outs[out_][count].split(out_)[0].split(" ")))
            time2 = float("".join(outs[out_][count + 1].split(out_)[0].split(" ")))
            print("{0} Bytes Increment from {1} to {2} i.e = ".format(out_,outs[out_][count].split(out_)[1],outs[out_][count+1].split(out_)[1] ), bytes2-bytes1)
            print("{0} Time Increment from {1} to {2} i.e  = ".format(out_,outs[out_][count].split(out_)[0],outs[out_][count+1].split(out_)[0]), bytes2 - bytes1)
            count+=1

输出

ID1 Bytes Increment from  00 08 07 06 05 04 to  00 08 07 06 05 08 i.e =  4
ID1 Time Increment from 0.516516  to 0.516520  i.e  =  4

注意:此实现仅供您进行比较。

希望这有帮助

答案 1 :(得分:0)

如果您对使用第三方库感到满意,可以通过以下几行有效地使用pandas

import pandas as pd
from io import StringIO

mystr = StringIO("""0.516516 ID1 00 08 07 06 05 04
0.516517 ID2 00 08 07 06 05 05
0.516518 ID3 00 08 07 06 05 06
0.516519 ID4 00 08 07 06 05 07
0.516520 ID1 00 08 07 06 05 08
""")

# read file, replace mystr with 'file.csv'
df = pd.read_csv(mystr, header=None, delim_whitespace=True)

# sort by second column, write to csv
df.sort_values(1).to_csv(header=False, index=False, sep=' ')