В Python как импортировать файлы из каталога, который соответствует определенным датам, новее, чем то, что находится в моей таблице SQL - PullRequest
0 голосов
/ 07 мая 2020

У меня есть папка, содержащая много файлов .csv с необработанными данными, для которых у меня есть сценарий, написанный для импорта, обработки и последующего добавления в таблицу базы данных SQL.

Каждый день папка обновлен необработанным csv предыдущего дня. Я пытаюсь написать код для поиска в базе данных SQL последней даты и импортировать только новые необработанные файлы.

Файлы Csv всегда заканчиваются на DDMMYYYY_raw.csv

, поэтому далеко у меня:

#Finding the max date in the SQL server
maxdate = engine.execute("Select MAX([TableDate]) as 'Max Date' From [dbo].[SQLTable]")
for row in maxdate:
    latestdate = row[0]
    print(latestdate)

#Adding 1 day so it gets the next days data csv
date2get = latestdate + timedelta(days=1)
print(date2get)

#Working out what year, month and day to get for 
yrtoget = date2get.year
mthtoget = date2get.month
daytoget = date2get.day

#Todays Date Calclulation
timerightnow = datetime.now()
yearend = timerightnow.year
monthend = timerightnow.month
dayend = timerightnow.day

#Start and end date
start_dt = date(yrtoget, mthtoget, daytoget)
end_dt = date(yearend, monthend, dayend)

#Date Calculation
def daterange(date1, date2):
    for n in range(int((date2 - date1).days) + 1):
        yield date1 + timedelta(n)

#Create and populate list of files to get
filestoget = []
for dt in daterange(start_dt, end_dt):
    filestoget.append(dt.strftime("%d%m%Y") + '_raw.csv')
print(filestoget)

Итак, filestoget дает мне:

print(filestoget):

['06052020_raw.csv', '07052020_raw.csv']

Что правильно.

ВОПРОС: Как мне теперь импортировать все CSV, у которых есть эти окончания?

Это то, что мне сейчас нужно было импортировать все файлы csv (но не для определенных c дат)

csvfiles = glob.glob(os.path.join(file_path, '*.csv'))
for csvfile in csvfiles:
    with open(csvfile, 'r') as read_obj:
    ...#code then starts
    ...
    ...

Мне нужно создать еще л oop? и отрегулируйте строку csvfiles = glob.glob(os.path.join(file_path, '*.csv'))

Любая помощь будет принята с благодарностью. Спасибо

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Примерно так:

endings  = ['06052020_raw.csv', '07052020_raw.csv']
csvfiles = glob.glob(os.path.join(file_path, '*.csv'))
for csvfile in csvfiles:
    if any(csvfile.endswith(ending) for ending in endings):
        with open(csvfile, 'r') as read_obj:
        ...#code then starts
0 голосов
/ 07 мая 2020

В итоге я смог его получить. Проще, чем я думал, мне просто нужно было добавить еще l oop и сдвинуть весь код внизу, чтобы попасть в строку:

for files in filestoget:
    csvfiles = glob.glob(os.path.join(file_path, '*'+ files))
    for csvfile in csvfiles:
        # open file in read mode
        with open(csvfile, 'r') as read_obj:
        ...#code then starts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...