У меня есть 4 файла excel, сохраненные в каталоге как таковые:
Data_1_ABC.xlsx создан в 6 часов
Data_2_XYD.xlsx создан в 7 часов
Data_3_DEF.xlsx создан в 8 часов
Data_4_KLM.xlsx создан в 9 часов
Чтобы прочитать последний файл csv, я использовал следующие коды:
import glob
import os
import pandas as pd
all_files = glob.glob('Data_*.xlsx')
Select_latest_file = max(all_files, key=os.path.getctime)
print("\n","File selected is: ",Select_latest_file,"\n")
df = pd.read_excel(Select_latest_file)
print(df)
Теперь последним выбранным файлом является Data_4_KLM.csv, что совершенно нормально.
Однако файлы продолжают повторяться через равные промежутки времени, а буквы после Data_4_, т.е. KLM, продолжают меняться.
Итак, я хочу извлечь содержимое файла при условии, что файл csv начинается с Data_4_
Я пробовал следующие коды, но не смог получить никаких результатов:
if Select_latest_file == glob.glob('Data_4_*.xlsx'):
print("Data_4 has been has been selected")
Может кто-нибудь, пожалуйста, дайте мне знать, как мы это делаем?
Это как в 6 утра. (24-часовой тактовый цикл)
Я считаю, что функция glob.glob возвращает список файлов, соответствующих вашим критериям. Поэтому при втором подходе, когда вы выбрали все файлы, соответствующие вашим критериям Select_latest_file == glob.glob('Data_4_*.xlsx')
, вам нужно идентифицировать файл в списке с последней информацией. Предполагая, что идентификаторы представляют собой трехбуквенные коды, и они следуют шаблону, аналогичному тому, что показано, вы должны иметь возможность сортировать Select_latest_file, а затем использовать select_latest_file[-1], чтобы получить последний.
Большое спасибо @itprorh66 за ваши предложения
Из документации:
Возвращает, возможно, пустой список имен путей, соответствующих пути, который должна быть строкой, содержащей спецификацию пути
Следовательно, Select_latest_file == glob.glob('Data_4_*.xlsx')
потерпит неудачу, поскольку вы сравниваете str
с list
.
Рассмотрим этот пример:
from glob import glob
p1 = "hi_*"
p2 = "*_there"
p3 = "*_here"
p4 = "missing"
print(glob(p1))
print(glob(p2))
print(glob(p3))
print(glob(p4))
for filename in glob(p1):
print(filename)
Выход:
['hi_there', 'hi_here']
['hi_there']
['hi_here']
[]
hi_there
hi_here
Однако в вашем случае вы могли бы просто if Select_latest_file.startswith("Data_4")
.
Большое спасибо @Kacper за ваши ценные предложения
@RanjanPal Я также предложил более простой подход прямо сейчас (см. Последнее редактирование)
Большое спасибо @Kacper за ваш ценный отзыв. Часть (см. последнее редактирование) полезна.
До сих пор я понял, что «all_files» — это список, а «Select_latest_file» — это строка.
Следовательно, мы можем извлечь первые 7 букв строки, а затем извлечь файл Data_4_ как таковой:
First_7_letters_of_file = Select_latest_file[:7]
if First_7_letters_of_file == 'Data_4_':
print("Data-4 has been selected")
Что значит "создано за 6 часов"? Не могли бы вы пояснить это.