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

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

28.01.2018, 21:47. Показов 1859. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru