Печать данных из os.listdir() с помощью pandas

#python #python-3.x #pandas #jupyter-lab

Вопрос:

У меня возникли проблемы с извлечением данных из папки, содержащей два csv-файла, которые каждый день обновляются, чтобы заменить более старый из двух файлов. Поскольку я всегда хочу извлечь последний/-1/самый последний файл, который находится в этой папке, какой запрос я могу выполнить, чтобы извлечь новейший файл с помощью pandas в Python 3 на JupyterLab? Когда я печатаю данные, которые хочу извлечь, я не получаю их в качестве ответа.

Код Python3 в JupyterLab:

 #install prep %conda install pandas import pandas as pd  #install  import glob  #naming path for most recent file FolderPath="Pathname of folder containing the two most recent csv files"  import os  #display name of most recent file in the pathname folder aka FolderPath NewestData = os.listdir(FolderPath) print(NewestData[-1])  #pull data from 'NewestData' UpdatedData = pd.read(NewestData[-1])  print(UpdatedData)  

Комментарии:

1. Правильный ли формат данных? Кроме того, это может быть папка и т. Д. Вам также необходимо добавить каталог папок перед NewestData[-1] , потому что он не добавляет его автоматически.

2. Кроме того, os.listdir() не гарантирует какого-либо конкретного порядка для возвращаемых имен. Сначала вы должны отсортировать результат.

3. Используйте glob, чтобы ограничить только CSV. glob.glob(os.path.join(FolderPath, "*.csv")) . Тогда вам все равно придется выяснить, какая из них самая новая. Есть ли подсказка в имени файла файла? Вы можете использовать os.stat(filename).st_mtime для последнего измененного файла. Это не всегда работает — если файл был перемещен в каталог, его mtime не меняется. В Windows можно использовать st_ctime , но не в Linux, где вам действительно нужно изменить файл, чтобы получить измененное время.

Ответ №1:

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

 FolderPath="C:/testpath" NewestData = os.listdir(FolderPath) UpdatedData = pd.read(os.path.join(FolderPath, NewestData[-1]))  

Единственное отличие заключается в том, что вы не добавляете FolderPath префикс в перечисленные каталоги, потому что ОС не делает этого автоматически.

Комментарии:

1. os.path.join() было бы лучшим способом объединить компоненты пути. Вам не нужно заботиться о конечной косой черте, используя ее.

2. Спасибо вам за этот AKX, решение, которое вы предоставили в этом ответе, сработало.