遍历文件夹,读取时间命名的文件

平常用到的一些数据文件,经常以时间命名,如“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 pd
from 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])

猜你喜欢

转载自blog.csdn.net/u010199776/article/details/67638130
今日推荐