Синтаксический анализ беспорядочных данных

#python

#python

Вопрос:

Я относительно новичок в python, и мне было интересно, могу ли я получить некоторую помощь в анализе данных, чтобы их было легче анализировать.


Мои данные представлены в следующей форме (каждая строка представляет собой целую строку):

 20160930-07:06:54.481737|I|MTP_4|CL:BF K7-M7-N7 Restrict for maxAggressive: -4.237195
20160930-07:06:54.481738|I|MTP_4|CL:BF K7-M7-N7 BidPrice: -5.0 mktBestBid: -5.0 bidTheo: -4.096774 bidSeedEdge: 0.195028 bidUnseedEdge: CL:BF K7-M7-N7 = 0.14042 Min Bid: -6.0 Max Ticks Offset: 1 Max Aggressive Ticks: 1
  

Это мой код до сих пор

 # Output file
output_filename = os.path.normpath("Mypath/testList.log")  
# Overwrites the file
with open(output_filename, "w") as out_file:  
    out_file.write("")

# Open output file
with open(output_filename, "a") as out_file:  
    # Open input file in 'read' mode
    with open("mypath/tradedata.log", "r") as in_file:
        # Loop over each log line, Grabs lines with necessary data
        for line in islice(in_file, 177004, 8349710):
                  out_file.write(line)
  

Было бы проще просто пройти и сделать это с помощью ключевых слов, таких как; bidUnseedEdge, mktBesdBid и т.д. ?

Комментарии:

1. Нам нужно немного больше контекста. Анализ данных выполняется для получения некоторого преимущества, например, для изменения типа представления или поиска / фильтрации элементов. Какова цель вашего синтаксического анализа? Пропуск строк, соответствующих некоторым критериям? Просто изменить представление? И если да, то к какому типу?

2. @Alex, какой фактический результат вам нужен?

3. Я пытаюсь получить данные для нашего продукта K7-M7-N7 и соответствующее значение для bidTheo и maxAggressive, чтобы я мог анализировать данные.

4. @Alex, включает ли источник данных и другие продукты? Кроме того, возможно, возникает сложность в понимании того, всегда ли две строки, которые вы показываете здесь, будут отображаться по порядку для одного и того же образца.

5. Все продукты имеют эту форму, и строки повторяются одинаково. В настоящее время я разделяю данные на два файла, так что у меня есть maxAggressive в одном файле и bidTheo в другом, я изо всех сил пытаюсь проанализировать это, чтобы я мог получить соответствующие значения.

Ответ №1:

 infilename = "path/data.log"
outfilename = "path/OutputData.csv"

with open(infilename, 'r') as infile,
     open(outfilename, "w") as outfile:
    lineCounter = 0
    for line in infile:
        lineCounter  = 1
        if lineCounter % 1000000 == 0:
            print lineCounter
        data = line.split("|")
        if len(data) < 4:
            continue
        bidsplit = data[3].split("bidTheo:")
        namebid = data[3].split("BidPrice:")
        if len(bidsplit) == 2:
            bid = float(bidsplit[1].strip().split()[0])
            bidname = namebid[0].strip().split(",")[0]
            #print "bidTheo,"   data[0]   ","   str(bid)
            outfile.write("bidTheo,"   data[0]   ","   bidname   ","   str(bid)   "n")
        offersplit = data[3].split("offerTheo:")
        nameoffer = data[3].split("AskPrice:")
        if len(offersplit) == 2:
            offer = float(offersplit[1].strip().split()[0])
            offername = nameoffer[0].strip().split(",")[0]
            #print "offerTheo,"   data[0]   ","   str(offer)
            outfile.write("offerTheo,"   data[0]   ","   offername   ","    str(offer)   "n")

print "Done"