2015-12-29 6 views
0

У меня есть большой набор mp3-аудиофайлов, каждый из которых содержит одно короткое предложение или в некоторых случаях два коротких предложения. Например, файл может содержать одно из следующих трех:Именование файлов для отражения предложений, хранящихся в

  1. ¡Нет tienes miedo!
  2. ¿Нет tienes miedo?
  3. Var är du? Här är jag.

Мне нужно написать функцию в Python3, которая принимает строку как:

"Var är du? Här är jag." 

и преобразует его в уникальный и допустимое имя файла для Mac Os X и Apache веб-сервер (не знать, что os), на которые в конечном итоге будут находиться аудиофайлы. Затем я буду воспроизводить аудиофайлы с помощью HTML5 и javascript.

Таким образом, функция python должна будет возвращать разные значения для «¡No tienes misdo!». и, например, «Нет tienes miedo?». Разумеется, было бы удобно, если функция вернет что-то читаемое, чтобы иметь представление о том, какое предложение связано с файлом, но это не обязательно, поскольку я буду автоматически генерировать html-скрипты из того же сценария python, имена которого mp3-файлы.

В конечном итоге я буду иметь дело со всей связью разных языков.

Как вы порекомендовали бы эту функцию написать?

Это моя слабая попытка:

def file_name(s): 
    return "".join("{:02x}".format(c) for c in s.encode()) 

file_name('Eso no es bueno, ¿no?') 

Который возвращает:

'45736f206e6f206573206275656e6f2c20c2bf6e6f3f' 
+1

Это уже допустимые имена файлов для OSX. – Turn

+0

@Turn Не знаю, что работает веб-сервер – Baz

+0

Генерировать SHA1 хэш из имени файла (или, что еще лучше, ** содержимое **). Если он достаточно хорош для 'git', он достаточно хорош для вашего сайта. –

ответ

0

Вы пытаетесь преобразовать строку в другую строку, которая использует меньший набор символов. Это означает, что каждый символ содержит меньше информации, что означает, что должно быть больше символов; то есть имя файла должно быть больше, чем исходная строка. Однако вы не можете просто преобразовать каждый специальный символ в строку буквенно-цифровых символов; это было бы неотличимо от этой строки в оригинале, если вы также не разрешаете разрешенные символы до более длинных строк. Это говорит о том, что имена файлов, вероятно, не могут быть удобочитаемыми для человека. Если вы избавитесь от этого ограничения, хеширование, вероятно, лучший способ пойти. Вы используете Python 3, так что вы можете сделать это с помощью hashlib:

def file_name(s): 
    hash=hashlib.md5() #you can use any algorithm here 
    hash.update(s) 
    return hash.digest() 
Смежные вопросы