Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327

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

31.12.2023, 11:28. Показов 399. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, хотел сделать универсальный код, чтобы сортировка работала независимо есть ли полный путь к файлу или название только имени файла:
Python
1
2
3
4
5
6
7
8
9
10
11
12
filelst1 = ['2.text', '10.text', '1.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/10.text', 'i:/Российская Федерация/1.text']
def keyFunc(x):
    if len(x) == 3:
        return int(x.split('.')[0])
    else:
        return str(x)
filelst1.sort(key=keyFunc)
print('\n'.join(filelst1))
print('=================')
filelst2.sort(key=keyFunc)
print('\n'.join(filelst2))
не получилось...
нужен ответ
1.text
2.text
10.text
=================
i:/Российская Федерация/1.text
i:/Российская Федерация/2.text
i:/Российская Федерация/10.text

Добавлено через 15 минут
решение есть:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
filelst1 = ['2.text', '10.text', '1.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/10.text', 'i:/Российская Федерация/1.text']
import re
def keyFunc(x):
    match = re.search(r'\d+', x) # Ищем число в имени файла
    if match:
        return int(match.group()) # Возвращаем число, найденное в имени файла
    else:
        return 0 # Если числа нет, возвращаем 0
filelst1.sort(key=keyFunc)
print('\n'.join(filelst1))
print('=================')
filelst2.sort(key=keyFunc)
print('\n'.join(filelst2))
решение верное, но не нравится, что в решении идёт привязка к цифрам, наверное могут найтись случаи, когда этот подход не сработает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.12.2023, 11:28
Ответы с готовыми решениями:

Из полного имени файла путь к файлу
Надо из полного имени файла достать только путь к файлу,то есть из например: из C:\lalala\ggg\text.txt достать C:\lalala\ggg Как это...

Выделить из полного пути к файлу только имя файла
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой ...

Как извлечь имя файла из полного пути к файлу?
Вот к примеру, я загрузил файл, и в edt1.Text - он записал путь к файлу... C:\Program Files\Music\may.mp3 Отсюда, я хочу выделить...

4
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.12.2023, 12:14
Ципихович Эндрю, Для представленных данных (наименование файлов состоит только из целых чисел) больше подходит
Python
1
2
def keyFunc(x):
    return int(x.split('/')[-1].split('.')[0])
Пс. В наименовании пути (папок) тоже могут быть цифры, из-за которых функцию с регуляркой нужно переделать
Для обработки «буквенных» можно и так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
filelst1 = ['2.text', '10.text', 'r.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/10.text', 'i:/Российская Федерация/1.text']
def keyFunc(x):
    try:
        return int(x.split('/')[-1].split('.')[0])
    except:
        return 0
    
filelst1.sort(key=keyFunc)
print('\n'.join(filelst1))
print('=================')
filelst2.sort(key=keyFunc)
print('\n'.join(filelst2))
Добавлено через 43 минуты
Кстати, есть модуль «естественной сортировки»
Python
1
2
3
4
5
6
7
8
from natsort import natsorted
 
filelst1 = ['2.text', 'r0.text', '1.text']
filelst2 = ['i:/Российская Федерация/2.text', 'i:/Российская Федерация/r0.text', 'i:/Российская Федерация/1.text']
 
print('\n'.join(natsorted(filelst1)))
print('=================')
print('\n'.join(natsorted(filelst2)))
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
31.12.2023, 12:27  [ТС]
Цитата Сообщение от Gdez Посмотреть сообщение
Кстати, есть модуль «естественной сортировки»
вы как ставили: pip install natsorted?
ERROR: Could not find a version that satisfies the requirement natsorted (from versions: none)
ERROR: No matching distribution found for natsorted
================================
ОШИБКА: не удалось найти версию, удовлетворяющую требованию natsorted (из версий: нет)
ОШИБКА: для natsorted не найдено подходящего дистрибутива.
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.12.2023, 14:19
Ципихович Эндрю,
вы как ставили: pip install natsorted?
pip install natsort
1
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,327
31.12.2023, 14:33  [ТС]
так вот по мотивам моей темы Переменная окружения PATH и кавычки
на этом примере, чтобы не было в дальнейшем сотрясание воздуха - мой пост № 3
а если бы в коде была проверка вида:
1 а установлен ли нужный модуль
2 а установлен ли правильно нужный модуль - имеется всякого рода засады с окружением и т.д и т.п.
pass
else
код берёт и сам ставит, в данном случае natsort а не как я ставил natsorted
мысль понятна, это возможно?
ответы на сей пост предполагаю - но тем НЕ менее, воздух бы меньше сотрясался))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.12.2023, 14:33
Помогаю со студенческими работами здесь

Из полного пути к файлу выделить только имя файла
Написать программу, которая по введённому полному пути к файлу выделяла бы только имя файла (то, что следует после последнего слеша или...

Выделить из полного пути к файлу имя файла (без расширения)
Дана строка, содержащая полное имя файла, то есть имя диска, список каталогов (путь), собственно имя и расширение. Выделить из этой строки...

Как из полного пути до файла получить только путь без имени файла?
Здравствуйте! Как из полного пути получить только путь без имени файла? допустим есть путь...

WebBrowser и TreeView. Открытие файла без указания полного пути к файлу
Здравствуйте:) Есть форма в котором находятся WebBrowser и TreeView. При выборе узла в TreeView в WebBrowser отображается соответствующий...

Функция, которая получает имя файла + расширение, из полного пути к файлу
Например, есть путь «C:\windows\test.txt», из него нужно получить test.txt. Я видел такую функцию с использованием std::string, я же не...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru