Поиск отсутствующих данных в Timesstamp

Я пытаюсь посмотреть файл CSV, но я хочу, чтобы все данные были там. Время CSV в формате 15 минут составляет yyyy-mm-dd-hh: mm. Я собрал данные и сделал отметку времени. lst = list ()

with open("CHFJPY15.csv", "r") as f: f_r = f.read() sline = f_r.split() for line in sline: parts = line.split(',') date = parts[0] time = parts[1] closeingtime = parts[5] timestamp = date + time + closeingtime lst.append(timestamp) print(lst, "liste") 

Как видно ниже, CSV – это просто длинный список данных. Опять же, я действительно хочу проверить, что все данные есть каждые 15 минут. Но я точно не знаю, как это кодировать.

'2015.12.09.19:45 123.251', '2015.12.09.20:00 123.188', '2015.12.09.20: 15123.192', '2015.12.09.20:30 123.242', '2015.12.09.20: 45123.166', .. и т.д ..

3 Solutions collect form web for “Поиск отсутствующих данных в Timesstamp”

Возможно, вы не заметили, что элементы в этом списке данных несовместимы в формате. Например, между датой и другими данными в промежутке времени есть 2015.12.09.20: 45123.166 2015.12.09.19:45 123.251 но в 2015.12.09.19:45 123.251 году разрыв остается по- 2015.12.09.20: 45123.166 . Я собираюсь предположить, что вы справитесь с этим.

Я начинаю с создания последовательно отформатированного списка элементов данных, похожих на ваши. Хотя большинство дат разделены пятнадцатиминутными интервалами, я сознательно вставляю некоторые пробелы.

 >>> from datetime import timedelta >>> interval = timedelta(minutes=15) >>> from datetime import datetime >>> current_time = datetime(2015,12,9,19,30) >>> data = [] >>> omits = [3,5,9,11,17] >>> for i in range(20): ... current_time += interval ... if i in omits: ... continue ... data.append(current_time.strftime('%y.%m.%d.%H:%M')+' 123.456') ... >>> data ['15.12.09.19:45 123.456', '15.12.09.20:00 123.456', '15.12.09.20:15 123.456', '15.12.09.20:45 123.456', '15.12.09.21:15 123.456', '15.12.09.21:30 123.456', '15.12.09.21:45 123.456', '15.12.09.22:15 123.456', '15.12.09.22:45 123.456', '15.12.09.23:00 123.456', '15.12.09.23:15 123.456', '15.12.09.23:30 123.456', '15.12.09.23:45 123.456', '15.12.10.00:15 123.456', '15.12.10.00:30 123.456'] 

Теперь я прочитал даты, вычитая каждый из них предшественника. Я установил первый «предшественник», который я называю previous потому что он должен отличаться от других дат.

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

 >>> previous = datetime.now().strftime('%y.%m.%d.%H:%M') >>> first = True >>> for d in data: ... date_part, other = d.split(' ') ... if datetime.strptime(date_part, '%y.%m.%d.%H:%M') - datetime.strptime(previous, '%y.%m.%d.%H:%M') != interval: ... if not first: ... 'unacceptable gap prior to ', date_part ... else: ... first = False ... previous = date_part ... ('unacceptable gap prior to ', '15.12.09.20:45') ('unacceptable gap prior to ', '15.12.09.21:15') ('unacceptable gap prior to ', '15.12.09.22:15') ('unacceptable gap prior to ', '15.12.09.22:45') ('unacceptable gap prior to ', '15.12.10.00:15') 

Существует пакет Python, называемый datetime, который вы можете использовать. Если вы отслеживали предыдущее время записи как объект datetime, называемый prev, и создали timedelta в течение 15 минут с именем delt, вы могли бы легко проверить, будет ли в следующий раз в файле (как datetime с именем new_dt) prev + delt == new_dt. Если они все это делают, вы не пропустите ни минуты.

Дополнительная информация о пакете datetime здесь: https://docs.python.org/3/library/datetime.html

Я думаю, что это не хорошая практика, чтобы дублировать ваш собственный вопрос, менее 24 часов после первого сообщения. Более того, включая полный ответ на ваш первый пост в новом. Это кажется беспорядочным для новых читателей и немного неуважением к людям, которые ответили на ваш первый вопрос.

При этом ваша обработка, вероятно, будет быстрее с использованием pandas .

 import pandas as pd # Read your data as a pandas Dataframe data = pd.read_csv("your_file.csv", # Path to your file parse_dates=True, # Automatically parse dates from string infer_datetime_format=True) # Can speed things up # Compute the time deltas data['deltas'] = pd.NaT # Create new column with no values for i, r in df.iterrows(): # iterate over lines if not i: continue # skip first line delta = df.ix[i, 'date'] - df.ix[i - 1, 'date'] # compute time delta df.ix[i, 'deltas'] = delta # Attribute delta value to table # And display any abnormal value pd.where(df.deltas != pd.Timedelta('15 min')).dropna() 

Обратите внимание, что я не уверен в формате вашего CSV-файла, который может потребовать дополнительной операции для загрузки в качестве pd.Dataframe .

Python - лучший язык программирования в мире.