您的位置:首页 > 编程语言 > Python开发

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

2017-03-28 16:17 429 查看
平常用到的一些数据文件,经常以时间命名,如“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])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐