平常用到的一些数据文件,经常以时间命名,如“170128.csv”、“170328.csv”等,但是我们想分析一段时间的数据时就需要按照时间选取文件,这时候按170128的数值直接加减并不合适,因为没有170150这类的时间,因此需要按时间戳的加减来选择,时间戳的形式一般为“1/6/17”、“17-01-06”等,与我们存数据的格式不同,因此,我们需要完成时间戳与时间字符串之间的转换。
下面以python为例来说明(其他软件读取文件的思想类似,只是采用的函数不同):
1、起止时间为字符串:
#文件按年、月分文件夹存储文件,如170128.csv文件的路径为...\2017\1\170128.csv
#读取文件后将所有csv文件拼接
import pandas as pd
from datetime import datetime
import os
Startday='170106' #起始时间
Endday='170207' #终止时间
start=datetime.strptime(Startday,'%y%m%d') #转换为datetime格式的时间戳
end=datetime.strptime(Endday,'%y%m%d')
Frame=pd.DataFrame()
for year in range(start.year,end.year+1):
for month in range(start.month,end.month+1):
pathname= os.path.join(u'Z:\data',Item_num,Car_num,str(year),str(month))#文件夹路径名称
filenames=os.listdir(pathname) #遍历文件夹,得到该文件夹下的文件及子文件夹名字
for i in filenames:
if (datetime.strptime(i[11:17],'%y%m%d')-start).days>=0 and (datetime.strptime(i[11:17],'%y%m%d')-end).days<=0: #选取起止时间段内的文件
filepath=os.path.join(pathname,i) #得到文件的路径
F=pd.read_csv(filepath,skiprows=1,encoding="gbk",engine='python')#读取csv文件
Frame=pd.concat([Frame,F])
2、起止时间为datetime:
import pandas as pdfrom datetime import datetime
import os
Startday=datetime(2017,1,6,0,0,0)#起始时间
Endday=datetime(2017,2,7,0,0,0)#终止时间#
Frame=pd.DataFrame()
for year in range(Startday.year,Endday.year+1):
for month in range(Startday.month,Endday.month+1):
pathname= os.path.join(u'Z:\data',str(year),str(month))
filenames=os.listdir(pathname)
for i in filenames:
if datetime.strptime(i[11:17],'%y%m%d')>=Startday and datetime.strptime(i[11:17],'%y%m%d')<=Endday:
filepath=os.path.join(pathname,i)
F=pd.read_csv(filepath,skiprows=1,encoding="gbk",engine='python')#读取csv文件
Frame=pd.concat([Frame,F])