我试图查看CSV文件,但我想确保所有数据都在那里。 CSV时间为15 Min格式为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', ..等等。
答案 0 :(得分:2)
您可能没有注意到该数据列表中的项目格式不一致。例如,日期与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
称为now
,因为它必然会与其他日期不同。
我将列表中的每个数据分成两部分,忽略第二部分。使用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')
答案 1 :(得分:1)
您可以使用名为datetime的Python包。如果您将之前的条目时间跟踪为名为prev的日期时间对象,并创建了一个名为delt的15分钟timedelta,您可以轻松检查文件中的下一次(作为名为new_dt的日期时间)是否具有prev + delt == new_dt。如果他们都这样做,你就不会错过任何时间。
有关datetime包的更多信息,请点击此处: https://docs.python.org/3/library/datetime.html
答案 2 :(得分:0)
我认为duplicate你自己的问题不是好习惯,不到第一篇文章后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
。