2015-12-29 34 views
0

中的句子我有一大组mp3音频文件,每个文件包含一个简短的句子或在某些情况下包含两个短句子。例如,该文件可能包含以下三种类型之一:命名文件以反映存储在

  1. 没有tienes miedo!
  2. ¿No tienes miedo?
  3. Varärdu?你好!

我需要写在python3一个函数,这样的字符:

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

,并将其转换为Mac OS X和Apache Web服务器的唯一且有效的文件名(不知道什么操作系统)音频文件将最终驻留。然后,我将使用HTML5和JavaScript播放音频文件。

因此,python函数将需要返回不同的值“”没有tienes misdo!“例如,“¿No tienes miedo?”。如果函数返回一些可读的东西,这当然会很方便,这样人们就可以知道该文件与哪个句子相关联,但这不是强制性的,因为我将通过相同的python脚本自动生成html脚本, 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不知道Web服务器运行的是什么 – 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()