Выставить фильтр на выборку файлов в имени которых не более одной точки

for file in glob.glob(patch+'*.*'):

Таким образом, выбираем из папки все файлы в имени которых есть точка. Проблема в том, что может захватить тот файл который в процессе загрузки.

К примеру, закидывают файл размером в 10 гб. Система дает ему временное имя

news.mp4.filepart

То есть данный файл, пайтон тоже прихватит. Собственно вопрос, как выставить фильтр на то, что в имени должна присутствовать точка и в количестве 1шт.


Ответы (1 шт):

Автор решения: Amgarak

1)Как вариант - использовать count для подсчета количества вхождений подстроки в строке, а дальше любое условие на свой вкус..

def valid_name(filename):
    if filename.count('.') == 1:
        print("True")
    else:
        print("False")

file_name = "news.mp4.filepart"
file_name2= "news.mp4filepart"

valid_name(file_name) # False
valid_name(file_name2) # True

2)Если все файлы переименовываются пока закачиваются и получают расширение .filepart, тогда всё просто..

def valid_name(filename):
    
    if filename.endswith('.filepart'):
        print("False")
    else:
        print("True")

file_name = "news.mp4.filepart"
file_name2= "news.mp4"

valid_name(file_name) #False
valid_name(file_name2) #True

3)Вообще, надо поэкспериментировать, и попытаться открыть файл который ещё загружаются! По идеи он должен быть ещё заблокирован и выбьет ошибку. Обрабатываем исключение и не добавляем его в список файлов?‍♀️


4)Как вариант можно пройтись по всем файлам в каталоге дважды и сравнить значения при первом проходе со вторым. Те что в размере не увеличились те в список и добавляем.

→ Ссылка