Как мне преобразовать целые числа во времена высокого разрешения в Python? Или как мне не дать Python сбросить нули? - PullRequest
0 голосов
/ 14 декабря 2011

В настоящее время я использую это для вычисления времени между двумя сообщениями и перечисления времени, если они превышают 20 секунд.

def time_deltas(infile): 
    entries = (line.split() for line in open(INFILE, "r")) 
    ts = {}
    for e in entries:
        if " ".join(e[2:5]) == "OuchMsg out: [O]": 
            ts[e[8]] = e[0]    
        elif " ".join(e[2:5]) == "OuchMsg in: [A]":    
            in_ts, ref_id = e[0], e[7] 
            out_ts = ts.pop(ref_id, None) 
            yield (float(out_ts),ref_id[1:-1],(float(in_ts)*10000 - float(out_ts)*10000))

            n = (float(in_ts)*10000 - float(out_ts)*10000)
            if n> 20:
                print float(out_ts),ref_id[1:-1], n

    INFILE = 'C:/Users/klee/Documents/text.txt'
    import csv 

    with open('output_file1.csv', 'w') as f: 
    csv.writer(f).writerows(time_deltas(INFILE)) 

Однако есть две основные ошибки.Прежде всего, питон сбрасывает нули, когда время до 10, т.е.0900. И он сбрасывает нули, делая разницу во времени неточной.

Похоже: 130203.08766, когда должно быть: 130203.087660

1 Ответ

1 голос
/ 14 декабря 2011

Вы используете yield с плавающей точкой, поэтому csv Writer превращает эти числа с плавающей точкой в ​​нужные строки.

Если вы хотите, чтобы ваши выходные значения были определенного формата, yield строка в этом формате.

Возможно, что-то вроде этого?

print "%04.0f" % (900)     # prints 0900
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...