Генерация путей файловой системы с фиксированной строкой


Это умно, но меня тошнит немного:

file = '0123456789abcdef123'

path = os.sep.join([ file[ x:(x+2) ] for x in range(0,5,2) ])


377
0
задан 28 января 2011 в 01:01 Источник Поделиться
Комментарии
2 ответа

Я понятия не имею, что вы пытаетесь сделать здесь, но, похоже, ты разбиваем строку на группы по два определенное количество раз? Несмотря на магические константы, и т. д. там действительно нет лучшего способа сделать это, но я думаю, что есть, конечно, лучший способ, чтобы отформатировать его (я предполагаю, что эти несколько каталогов, так как вы используете ОС.сентября):

Внизу как мне кажется, более ясный способ, чтобы написать это:

file = '0123456789abcdef123'
dir_len = 2
path_len = 3

path = os.sep.join(file[ x:(x+2) ] for x in range(0, dir_len * path_len-1, dir_len))

Обратите внимание, что [] вокруг списка понимания нет - это генератор. В данном примере это действительно не имеет значения, какой вы используете, но так как это комментарий код генераторы-другая концепция Python вы должны смотреть на.

2
ответ дан 28 января 2011 в 02:01 Источник Поделиться

Есть причина, по которой ты не просто делаешь:

path = os.sep.join([file[0:2], file[2:4], file[4:6]])

Я думаю, что моя версия немного легче, чтобы разобрать (как человека), но если вам нужно расширить количество групп, ваш код более расширяемым.

Редактировать: и если мы ищем вещи, которые легко читать, но не обязательно лучший способ, чтобы сделать это...

slash = os.sep
path = file[0:2] + slash + file[2:4] + slash + file[4:6]

10
ответ дан 28 января 2011 в 02:01 Источник Поделиться