Удалить ms из времени эпохи, полученного с помощью json.loads - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть файл, разделенный по конвейеру, с одним полем, содержащим некоторую информацию в формате JSON:

1|2|{"StartTime":1572300507000,"EndTime":1547506800474,"DeleteTime":1572217199000}|4     

Для получения значений JSON я использую json.loads.

Сильфон является частью моего кода:

import sys,json,time


with open(sys.argv[1], 'r') as file:
    for line in file:
        fields = line.split('|')
        print time.strftime('"%Y%m%d%H%M%S"', time.localtime(json.loads(fields[2])['StartTime'])

, который не работает, как ожидалось, поскольку время эпохи также составляет мс.Самое простое решение - разделить эпоху на 1000 и сделать что-то вроде этого:

time.strftime('"%Y%m%d%H%M%S"', time.localtime(json.loads(fields[2])['StartTime']/1000)

Что, конечно, не работает, так как я получаю следующую ошибку:

TypeError: unsupported operand type(s) for /: 'time.struct_time' and 'int'

Какой правильный способ сделать это?Я также пытаюсь найти наиболее эффективный способ, поскольку файл содержит миллион строк.

1 Ответ

1 голос
/ 26 сентября 2019

Вы должны разделить число, ваша ошибка основана на несовпадающих скобках:

d = '''{"StartTime":1572300507000,"EndTime":1547506800474,"DeleteTime":1572217199000}'''
time.strftime('"%Y%m%d%H%M%S"', time.localtime(json.loads(d)['StartTime']/1000))

Вывод:

'"20191028230827"'
...