Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 30

Очистки директории N от папок версии старше заданной

28.01.2018, 21:47. Показов 1881. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста решить задачу, с Python только начал знакомится, и идеи как это можно сделать закончились

В директории N содержатся папки, название папок состоит из ИМЯ_версия (papka_3.7.6.10 papka_3.7.6.100 papka_3.7.7 и т. д.)
Нужно очистить директории N от папок продуктов версии старее заданной
Моей фантазии хватило, но работает не корректно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
s = input("Введите дирекорию:")
ver = input("Введите версию:")
import os
direct = os.listdir(s)
for x in direct:
    x = x[x.find('_')+1:]
    print(x)
    a = x.split('.')
    b = ver.split('.')
    if len(b) < len(a) : d = len(b)
    else: len(a)
    for i in range(d):
        a[i] = int(a[i])
        b[i] = int(b[i])
        if a[i] < b[i] : print('Удаляется')
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2018, 21:47
Ответы с готовыми решениями:

Список файлов и папок в заданной директории
Всем здравствуйте. Скажите как получить дерево файлов и папок в заданной дериктории? И все это в двумерный массив засунуть из 3х столбцов,...

Как получить список папок в заданной директории
Подскажите как получить список папок в заданной директории (при этом имена файлов в список попадать не должны)?

Аналог ls (вывод списка папок и файлов в заданной директории)
как сделать, чтобы программа выводила список папок и файлов в заданной директории?

8
97 / 97 / 38
Регистрация: 30.11.2017
Сообщений: 180
28.01.2018, 23:36
Получилось так, но это надо оптимизировать

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def get_version(val):
    ver = [0,0,0,0]
    tmp = val.split('.')
    for i,x in enumerate(tmp):
        ver[i] = int(x)
    return ver
 
def is_older_version(version, limit):
    if version[0] > limit[0]:
        return True
    else:
        if version[0] == limit[0] and version[1] > limit[1]:
            return True
        else:
            if version[0] == limit[0] and version[1] == limit[1] and version[2] > limit[2]:
                return True
            else:
                if version[0] == limit[0] and version[1] == limit[1] and version[2] == limit[2] and version[3] > limit[3]:
                    return True
    return False
 
data = get_version('3.8.1.1')
versions = [get_version('3.6.100'), get_version('3.7.6.10'), get_version('3.7.6.100'), get_version('3.7.7')]
 
for x in versions:
    if is_older_version(x, data):
        print('Удаляется', x)
    else:
        print('Не удаляется', x)
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
29.01.2018, 00:39
Лучший ответ Сообщение было отмечено Trolle9535 как решение

Решение

при вот таком наборе папок:


Python
1
2
3
4
5
6
7
8
9
10
init_path = '/Users/jabbson/PycharmProjects/connect/folder_N/'
 
lst_n = lambda x: [int(x) for x in x.split('.')]
compare_to = '7.7'  # всё, что меньше версии 7.7 удалить  
 
for f in os.listdir(init_path):
    if lst_n(f.split('_')[1]) < lst_n(compare_to):
        print('{:<13} -> del'.format(f))
    else:
        print('{:<13} -> keep'.format(f))
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
papka_7.3.0.2 -> del
papka_7.5.4.3 -> del
papka_7.7.4   -> keep
papka_7.7.2   -> keep
papka_7.9.8.3 -> keep
papka_7.1.9.2 -> del
papka_7.0.2   -> del
papka_7.7.1.7 -> keep
papka_7.2.2.3 -> del
papka_7.6.0.7 -> del
papka_7.7.7   -> keep
papka_7.6.0.6 -> del
papka_7.9.6.6 -> keep
papka_7.1.3.8 -> del
papka_7.4.9   -> del
PS del - удалить, keep - оставить
2
97 / 97 / 38
Регистрация: 30.11.2017
Сообщений: 180
29.01.2018, 00:42
Jabbson, только удалить надо старшие версии
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
29.01.2018, 00:56
Старше это те, у которых версия меньше, нет?
1
29.01.2018, 00:58

Не по теме:


что-то я отчаянно туплю

0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
29.01.2018, 02:12
А в python уже есть свои батарейки для сравнения версий :-)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from pip._vendor.packaging.version import parse as parse_version
 
dirs = [
    'papka_7.3.0.2',
    'papka_7.5.4.3',
    'papka_7.7.4',
    'papka_7.7.2',
    'papka_7.9.8.3',
    'papka_7.1.9.2',
    'papka_7.0.2',
    'papka_7.7.1.7',
    'papka_7.2.2.3',
    'papka_7.6.0.7',
    'papka_7.7.7',
    'papka_7.6.0.6',
    'papka_7.9.6.6',
    'papka_7.1.3.8',
    'papka_7.4.9'
]
 
# №1
compare_to = '7.7'
 
for d in dirs:
    if parse_version(d.split("_")[1]) < parse_version(compare_to):
        print('{:<13} -> del'.format(d))
    else:
        print('{:<13} -> keep'.format(d))
        
# #2
# если префикс(название продукта) всегда один и тот же, то сплитить вообще не нужно 
compare_to = 'papka_7.7'
 
for d in dirs:
    if parse_version(d) < parse_version(compare_to):
        print('{:<13} -> del'.format(d))
    else:
        print('{:<13} -> keep'.format(d))
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
papka_7.3.0.2 -> del
papka_7.5.4.3 -> del
papka_7.7.4   -> keep
papka_7.7.2   -> keep
papka_7.9.8.3 -> keep
papka_7.1.9.2 -> del
papka_7.0.2   -> del
papka_7.7.1.7 -> keep
papka_7.2.2.3 -> del
papka_7.6.0.7 -> del
papka_7.7.7   -> keep
papka_7.6.0.6 -> del
papka_7.9.6.6 -> keep
papka_7.1.3.8 -> del
papka_7.4.9   -> del
2
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
29.01.2018, 03:29
Не в python, а в pip, а pip не обязательно всегда бывает. Just saying

Добавлено через 3 минуты
поэтому предлагаю компромис в виде

Python
1
2
3
4
try:
    <решение Garry Galler>
except ImportError:
    <решение Jabbson>
0
0 / 0 / 0
Регистрация: 23.12.2013
Сообщений: 30
29.01.2018, 18:06  [ТС]
Большое спасибо, воспользовался решением от Jabbson
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2018, 18:06
Помогаю со студенческими работами здесь

Получить список папок в заданной директории и вывести в ListBox
Работаю в vb2010. Как можно узнать список папок, которые находятся в данной директории: Application.StartupPath &amp;...

Список всех файлов и папок указанной директории по заданной маске
Здравствуйте! Требуется написать программу, используя FileNameFilter которая выведет на экран список всех файлов и папок указанной...

Отобразить в консольном окне список всех папок заданной директории
Отобразить в консольном окне список всех папок заданной (любой) директории. В случае её отсуствия отображать соответствующее уведомление....

Обход заданной директории и вывод всех её файлов и папок в файл-отчет
Написать функцию, которая делает обход заданной директории и выводит все её файлы и папки и сохраняет всё в указанном текстовом файле....

Присвоение файлам из заданной папки имён папок, находящихся в одной директории с этой папкой
Возможно ли такое ? Например имеется 3 папки &quot; папка 1 папка 2 папка 3 &quot; в этом же катологе имеется папка под названием 1 в ней расположены...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru