Сортировка имени файла и полного пути к файлу

Автор Ципихович Эндрю, 1 января 2024, 21:11

0 Пользователи и 1 гость просматривают эту тему.

Ципихович Эндрю

здравствуйте, читал что скрипт макроса на VBA и на Python не могут находиться на одном листинге, так?
жалко конечно, придумали бы коллаборацию в виде декораторов или что-то похожее))
а есть переводчики с питона на либру - инструменты либры (я говорю не о джипити-думаю они не справятся, или справятся?, тогда дайте ссылку) или местные спецы, мне нужно списки отсортировать так как бы это сделал питон, есть два варианта:
filelst1 = ['2.text', '10.text', '1.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/10.text', 'i:/Российская Федерация/1.text']
def keyFunc1(x):
    return int(x.split('/')[-1].split('.')[0])
filelst1.sort(key=keyFunc1)
print('\n'.join(filelst1))
print('=================')
filelst2.sort(key=keyFunc1)
print('\n'.join(filelst2))
2
from natsort import natsorted # pip install natsort

filelst1 = ['2.text', '10.text', '1.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/10.text', 'i:/Российская Федерация/1.text']

print('\n'.join(natsorted(filelst1)))
print('=================')
print('\n'.join(natsorted(filelst2)))
в обоих случаях выведет
1.text
2.text
10.text
=================
i:/Российская Федерация/1.text
i:/Российская Федерация/2.text
i:/Российская Федерация/10.text
то есть отсортирует "по человечески"
или как будет подобное на либре?, спасибо

bigor

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

economist

Метод Basic invoke() может вызывать скрипт/UDF-def-функцию на Pytnon (файл *.py - это другой, нередактируемый модуль в Basic IDE, а def() в нем - это "макросы"). Передавая в invoke() аргумент(ы) и получая обратно один/неск. результатов - можно использовать лучшее из 2-х миров (StarBasic и Python) даже без общего листинга.

Чтобы избежать лексикографической сортировки файлов 1, 10, 11, 2, 3 - нужно именовать файлы с ведущими нулями 01, 02, 03...10, 11. Наиболее python-way будет использовать natsort()в списковом включении, а сам список получить через glob.glob() 
 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ципихович Эндрю

Цитата: bigor от  1 января 2024, 22:03Вы действительно будете обрабатывать файлы в именах которых только цифры?
да нет, они будут вида
1. название.text
10. название.text
2. название.text
Цитата: economist от  1 января 2024, 23:291, 10, 11, 2, 3 - нужно именовать файлы с ведущими нулями 01, 02, 03...10, 11
ну это как вариант - но мы не ищем лёгких путей))
Цитата: economist от  1 января 2024, 23:29Метод Basic invoke() может вызывать скрипт/UDF-def-функцию на Pytnon (файл *.py - это другой, нередактируемый модуль в Basic IDE, а def() в нем - это "макросы"). Передавая в invoke() аргумент(ы) и получая обратно один/неск. результатов - можно использовать лучшее из 2-х миров (StarBasic и Python) даже без общего листинга.
а можно пример - если можно максимально приближен к моей задаче, спасибо

economist

Примеры с UDF и invoke() есть на Форуме.  Поиск нужно вести в разделах Basic и Calc, не в корневом.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...