Читайте CSV-файл с его именем меняется каждый день - PullRequest
3 голосов
/ 30 марта 2020

Я пытаюсь прочитать CSV-файл в Pandas. Я автоматизирую скрипт для ежедневного чтения данных из csv и выполнения. Ежедневно новый CSV добавляется в папку, где у меня есть файлы CSV. Вновь добавленный CSV-файл имеет такой же формат имени, за исключением того, что часть даты в нем меняется ежедневно, а часть месяца меняется ежемесячно. Год будет меняться ежегодно. Как я могу автоматизировать ежедневное чтение файлов csv с постоянно меняющимся именем?

Пример: Если имя вчерашнего файла:

Name_29Mar2020_data_by_company.csv

Файл завтрашнего дня будет:

Name_30Mar2020_data_by_company.csv

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Вы можете использовать модуль datetime:

import pandas as pd
from datetime import datetime

fname = datetime.today().strftime('Name_%d%b%Y_data_by_company.csv')
df = pd.read_csv(fname)
1 голос
/ 30 марта 2020

Это проблема, с которой я столкнулся, в конце концов я отказался от имен файлов, так как они были несовместимы, и вместо этого создал функцию для получения последнего файла на основе последнего измененного времени или времени создания.

from pathlib import Path

def get_latest_file(src_path,extension,method='st_mtime'):
    """ 
    Takes in a raw path and extension to parse over
    returns a single file with the last modified date

    methods:
    st_mtime: It represents the time of most recent content modification. It is 
    expressed in seconds.
    st_ctime: It represents the time of most recent metadata change on Unix 
    and creation time on Windows. It is expressed in seconds.
    """

    extension = extension if extension[0] != '.' else extension[1:]

    files = (Path(src_path).glob(f'*.{extension}'))

    if method == 'st_mtime':
        file_dictionary = {file : file.stat().st_mtime for file in files}
    elif method == 'st_ctime':
        file_dictionary = {file : file.stat().st_ctime for file in files}
    else:
        raise Exception(f'{method} not valid for this function')

    max_file = max(file_dictionary, key=file_dictionary.get)


    return max_file

latest = get_latest_file('C:/Users/DataNovice',extension='csv',method='st_mtime')

print(latest)

out : WindowsPath('C:/Users/DataNovice/new_file_i_just_created.csv')


df = pd.read_csv(latest)
...