#1 12.03.2015 10:50:43

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Есть список файлов '*.mp3'.
Надо их конвертировать в '001.ogg', '002.ogg', '003.ogg' и т.д.
В команду конвертации подставляются по очереди все входные и выходные файлы.
Как создать список из '001.ogg', '002.ogg', '003.ogg' и т.д. для выходной переменной?

На баше у меня так, это маленький кусок функции для рекурсивного переименования:

x=1001                                                                                         
for FILE in $(find -maxdepth 1 -type f -iname "*.mp3"); do                                     
    mv $FILE ${x:1}.ogg                                                                    
    (( x++ ))                                                                                  
done

#2 12.03.2015 12:07:56

XliN
Administrator
Зарегистрирован: 22.04.2010
Сообщений: 4 240
IP-адрес

Научите как создать список средствами Python

Считать список файлов, загнать его в массив и в цикле подставлять последовательно.

#3 12.03.2015 12:36:38

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Зачем массив? Уже есть список. В смысле list

Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов

И вы не могли бы показать примерно этот цикл? А то совет из разряда:
(как выиграть войну? победить всех врагов)

#4 12.03.2015 12:37:18

Cruiser78
Administrator
Зарегистрирован: 22.02.2010
Сообщений: 2 391
IP-адрес

Научите как создать список средствами Python

Есть список файлов '*.mp3'.
Надо их конвертировать в '001.ogg', '002.ogg', '003.ogg' и т.д.
В команду конвертации подставляются по очереди все входные и выходные файлы.
Как создать список из '001.ogg', '002.ogg', '003.ogg' и т.д. для выходной переменной?

Вопрос не в тему, но зачем для этого питон? Неужели стандартных возможностей шелла не хватает для этой задачи?

Я за без малого 10-ти летнюю практику в linux'е написал не на шелле не больше пары-другой скриптов. И то потому, что надо было там работать с базой данных. Вся остальная автоматизация моих действий только на шелле. Здесь же, исходя из постановки задачи, мы видим один из базовых примеров программирования на шелле. Коих в сети выложены тыщи. Задача уровня "Hello Word!".

#5 12.03.2015 12:50:50

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

Научите как создать список средствами Python

Quote by Eeb>ei4m
Есть список файлов '*.mp3'.
Надо их конвертировать в '001.ogg', '002.ogg', '003.ogg' и т.д.


#!/bin/bash

for SRC in *.mp3; do
·   DEST="${SRC%.mp3}.ogg"
·   echo "convertor" "'$SRC'" "'$DEST'"
done


средствами Python

я и на BrainFuck могу, но д/з только за деньги.

#6 12.03.2015 13:03:28

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Есть список файлов '*.mp3'.
Надо их конвертировать в '001.ogg', '002.ogg', '003.ogg' и т.д.
В команду конвертации подставляются по очереди все входные и выходные файлы.
Как создать список из '001.ogg', '002.ogg', '003.ogg' и т.д. для выходной переменной?

Вопрос не в тему, но зачем для этого питон? Неужели стандартных возможностей шелла не хватает для этой задачи?

Я за без малого 10-ти летнюю практику в linux'е написал не на шелле не больше пары-другой скриптов. И то потому, что надо было там работать с базой данных. Вся остальная автоматизация моих действий только на шелле. Здесь же, исходя из постановки задачи, мы видим один из базовых примеров программирования на шелле. Коих в сети выложены тыщи. Задача уровня "Hello Word!".


Ух-ты! 10 лет! Ну ты и молодец!

1) Задача совсем не простая, я её упростил для вопроса. Если пойму как, дальше сам сделаю.
2) В интернете выложены тыщи говна, по моему вопросу не нашёл.
3) Я хочу перевести собственный скрипт написанный на bash на python (с целью изучения питона)
4) Ваш вопрос действительно не в тему. Так я могу и с подругой о программировании поговорить. Для флуда есть целый раздел.

Quote by Eeb>ei4m
Есть список файлов '*.mp3'.
Надо их конвертировать в '001.ogg', '002.ogg', '003.ogg' и т.д.


#!/bin/bash

for SRC in *.mp3; do
·   DEST="${SRC%.mp3}.ogg"
·   echo "convertor" "'$SRC'" "'$DEST'"
done


средствами Python

я и на BrainFuck могу, но д/з только за деньги.


Да не надо мне готового решения ни на баше ни на С. Я и сам могу.
Хочу питон выучить.

#7 12.03.2015 13:05:03

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

Научите как создать список средствами Python

Quote by Eeb>ei4m
И вы не могли бы показать примерно этот цикл?

не нужен тут никакой цикл:
[console]>>> l = [1,2,3,4,5]
>>> def f(x): return x+100
...
>>> map(f, l)
[101, 102, 103, 104, 105]
[/console]
надеюсь идея понятна. На всякий случай: https://docs.python.org/2/tutorial/datastructures.html

#8 12.03.2015 13:12:39

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Да, вроде понял. Надо поробовать map. Только ссылка устарела она для второго питона. У меня самая большая трудность в том что хочу нумерацию с 001.
Если '001' строка то не увеличить на единицу. Если цифра то 001 интерпритируется как единица.

#9 12.03.2015 13:19:09

s.xbatob
Administrator
Зарегистрирован: 20.11.2014
Сообщений: 229
IP-адрес

Научите как создать список средствами Python

У меня самая большая трудность в том что хочу нумерацию с 001.
Если '001' строка то не увеличить на единицу. Если цифра то 001 интерпритируется как единица.

у типов string, unicode и byte есть специально для таких случаев метод format (и устаревший, но до сих пор широко распространённый оператор %)

#10 12.03.2015 13:23:31

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Да, наверное format подойдёт. Спасибо пошёл пробовать.

#11 12.03.2015 15:43:25

s.xbatob
Administrator
Зарегистрирован: 20.11.2014
Сообщений: 229
IP-адрес

Научите как создать список средствами Python

Да, наверное format подойдёт. Спасибо пошёл пробовать.

Не нравится format - можете использовать rjust: :)
str(index).rjust (3, '0')

#12 12.03.2015 21:20:34

Eeb>ei4m
Administrator
Зарегистрирован: 10.01.2015
Сообщений: 99
IP-адрес

Научите как создать список средствами Python

Удалось сформировать список имён для выходных файлов.
Можно это как то улучшить?


newname = []
numeric = [format(i + 1, '03d') for i in range(len(filelist))]
for i in numeric:
    fullname = (i + '{}'.format('.ogg'))
    newname.append(fullname)

#13 13.03.2015 04:55:39

drBatty
Administrator
Зарегистрирован: 20.02.2010
Сообщений: 17 053
IP-адрес

Научите как создать список средствами Python

Quote by Eeb>ei4m
Только ссылка устарела она для второго питона.

в третьем как-то по другому?

Quote by Eeb>ei4m
У меня самая большая трудность в том что хочу нумерацию с 001.

facepalm

НЕ нужно никакой нумерации.

Quote by Eeb>ei4m
Можно это как то улучшить?

идите, и узнайте, что такое СПИСОК.

[console]>>> l = [ '1.ogg', '002.ogg', '-000007.ogg', '0.ogg' ]
>>> import re
>>> def sub_ogg_mp3(s): return re.sub('.ogg', '.mp3', s)
...
>>> map(sub_ogg_mp3, l)
['1.mp3', '002.mp3', '-000007.mp3', '0.mp3']
[/console]

Для тех, кто в танке: map это не функция, map это синтаксический сахар. В сишке map нет, там явно надо писать
for(j=0; j<N; j++)
  a[j] = 17;

в питоне — не нужно.

ВНЕЗАПНО: в третьем питоне — тоже не нужно костылить циклы.

#14 13.03.2015 06:10:51

s.xbatob
Administrator
Зарегистрирован: 20.11.2014
Сообщений: 229
IP-адрес

Научите как создать список средствами Python

dsts = map(lambda(i): '{0:03}.ogg'.format(i), range(len(srcs)))

Board footer