将句子保存为服务器文件名



我将一组句子的记录保存到相应的音频文件中。

句子包括:

Ich weiß es nicht!
¡No lo sé! 
Ég veit ekki!

您将如何建议我将句子转换为人类可读的文件名,后来将在在线服务器上使用。我现在不确定我将来可能会处理哪种语言。

更新:

请注意,两个句子不能相互冲突。例如:

É bär icke dej.
E bår icke dej.

无法分辨到相同的文件名,这些文件将彼此覆盖。这是这里提到的slugify函数的问题:将字符串变成有效的文件名?

我想出的最好的是使用urllib.parse.uquote。但是,我认为由此产生的输出比我希望的要困难得多。有任何建议吗?:

Ich%20wei%C3%9F%20es%20nicht%21
%C2%A1No%20lo%20s%C3%A9%21
%C3%89g%20veit%20ekki%21

unidecode呢?

import unidecode
a = [u'Ich weiß es nicht!', u'¡No lo sé!', u'Ég veit ekki!']
for s in a:
    print(unidecode.unidecode(s).replace(' ', '_'))

这给出了纯ASCII字符串,如果仍然包含不必要的字符,可以很容易地处理。保持空间以下划线的形式不同有助于可读性。

Ich_weiss_es_nicht!
!No_lo_se!
Eg_veit_ekki!

如果唯一性是问题,则可能会添加到字符串中。

编辑:

对于哈希似乎需要一些澄清。许多哈希功能是明确设计的,用于为关闭输入提供截然不同的输出。例如,Python的内置哈希函数给出:

In [1]: hash('¡No lo sé!')
Out[1]: 6428242682022633791
In [2]: hash('¡No lo se!')
Out[2]: 4215591310983444451

您可以做

之类的事情
unidecode.unidecode(s).replace(' ', '_') + '_' + str(hash(s))[:10]

为了获得不长的字符串。即使有如此缩短的哈斯,冲突也不太可能。

您可能应该尝试将空格转换为另一个符号,使您的字符串看起来像é-bär-icke-dej。

如果您使用python,我会这样。

  • 用( - )或(/)
  • 将空格替换为另一个符号
mystring.replace('',' - ')
  • 使用Chardet检测您的角色编码一个检测编码的Python软件包。

  • 使用pythons

  • 解码字符串
mystring.decode(*检测到的编码*)
  • 检查文件名是否已在您的目录中使用Python的OS软件包。像
files = os.listdir(*目录的路径*)
//获得重复文件名的
多少次冗余= 0
对于文件中的名称: 如果以我的名字命名: 冗余 = 1
  • 将冗余附加到您的字符串
如果冗余!= 0:    mystring = mystring 冗余
  • 使用UR字符串作为文件名!

希望这会有所帮助!

传统的UNIX/Linux文件名中唯一不允许的字符是斜杠(/ U 002F)和NULL字符(U 0000)。无需将您的示例转换为其他任何内容。

如果您需要将文件可用的文件提供给不使用相同文件名编码的系统,例如用于通过FTP下载或从Web服务器下载,也许您想将其视为明确的UTF-8。在大多数现代的u*XES上,这应该是违约的默认设置。这与您从urllib引用获得的结果相对应,其中编码百分比是一种安全且合理的标准方法,可以生产机器可读 nombiagious 的编码。如果将它们嵌入HTML或其他内容中,则可以保留显示文本的人类可读,只需保持链接机器可读即可。

<a href="%C3%89g%20veit%20ekki%21">Ég veit ekki!</a>

最新更新