Чтение файлов Excel с первыми буквами имени

У меня есть 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 часов"? Не могли бы вы пояснить это.

BcK 25.12.2020 15:22

Это как в 6 утра. (24-часовой тактовый цикл)

Ranjan Pal 25.12.2020 15:22

Я считаю, что функция glob.glob возвращает список файлов, соответствующих вашим критериям. Поэтому при втором подходе, когда вы выбрали все файлы, соответствующие вашим критериям Select_latest_file == glob.glob('Data_4_*.xlsx'), вам нужно идентифицировать файл в списке с последней информацией. Предполагая, что идентификаторы представляют собой трехбуквенные коды, и они следуют шаблону, аналогичному тому, что показано, вы должны иметь возможность сортировать Select_latest_file, а затем использовать select_latest_file[-1], чтобы получить последний.

itprorh66 25.12.2020 15:29

Большое спасибо @itprorh66 за ваши предложения

Ranjan Pal 25.12.2020 15:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
362
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из документации:

глоб.глоб

Возвращает, возможно, пустой список имен путей, соответствующих пути, который должна быть строкой, содержащей спецификацию пути

Следовательно, 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 за ваши ценные предложения

Ranjan Pal 25.12.2020 15:55

@RanjanPal Я также предложил более простой подход прямо сейчас (см. Последнее редактирование)

Kacperito 25.12.2020 15:56

Большое спасибо @Kacper за ваш ценный отзыв. Часть (см. последнее редактирование) полезна.

Ranjan Pal 25.12.2020 16:00

До сих пор я понял, что «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")

Другие вопросы по теме