提取两个日期之间已保存日期的文件

时间:2019-05-28 21:24:26

标签: python pandas file

我已将所有每日销售报告保存在一个公用文件夹中。每个文件都以相应的日期命名。例如:01-01-2019-Sales.csv,02-01-2019-Sales.csv等。所有文件都保存在“ C:\ Desktop \ Sales”文件夹路径中。现在我想提取并合并介于2019年5月1日至2019年4月2日之间的所有文件。

我知道我可以使用以下代码提取所有带有熊猫的文件

NSArray

但是,我的问题是我如何使用pandas / python在2个给定的特定日期之间提取文件。 (使用与日期一起保存的文件名),例如;仅提取2019年5月1日至2019年4月2日之间的文件。

4 个答案:

答案 0 :(得分:2)

start_date = "05-01-2019"
end_date = "04-02-2019"

all_csv_files = [x for x in os.listdir(file_path) if x.endswith('.csv')]
correct_date_files = [x for x in all_csv_files 
                      if x >= start_date + "-Sales.csv" and x <= end_date + "-Sales.csv"]
df = pd.concat([pd.read_csv(f) for f in correct_date_files], sort=False)

基本上,您只列出目录中的所有.csv个文件,并且仅在所选日期之间进行选择。

答案 1 :(得分:1)

我认为这段代码将为您提供帮助

import datetime

d1 = datetime.date(2019,1,1)
d2 = datetime.date(2019,2,1)

d3 = datetime.date(2019,1,20)
d4 = datetime.date(2019,2,20)

print(d1<d3<d2)
# True
print(d1<d4<d2)
# False

答案 2 :(得分:0)

使用日期作为比较:

import pandas as pd
import glob
import os
from time import strptime

file_path = r'C:\Desktop\Sales'
all_files = glob.glob(os.path.join(file_path,'*.csv'))
start_date = strptime('04-02-2019', '%m-%d-%Y')
end_date = strptime('05-01-2019', '%m-%d-%Y')
df = pd.concat([pd.read_csv(f) for f in all_files
                if start_date < strptime(f, '%d-%m-%Y.csv') < end_date],
               sort=False)

答案 3 :(得分:0)

可以用词法将日期与yyyy-mm-dd进行比较。

L = [ '01-01-2019-Sales.csv', '02-01-2019-Sales.csv']
>>> start = '2018-12-01'
>>> end = '2019-02-01'

>>> for file in L:
    m, d, yr = file.split('-')[:3]
    date = '-'.join([yr, m, d])
    if start <= date <= end:
        print(file)


01-01-2019-Sales.csv
02-01-2019-Sales.csv