从Unicode字符串中删除文件名中禁用字符的最有效方法[复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Unicode字符串中删除文件名中禁用字符的最有效方法[复制]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个字符串,其中包含我从Web解析的一些数据,并创建一个以此数据命名的文件。

string = urllib.urlopen("http://example.com").read()
f = open(path + "/" + string + ".txt")
f.write("abcdefg")
f.close()

问题是它可能包含以下字符之一: / * ? : " < > |。我正在使用Windows,禁止在文件名中使用这些字符。此外,string使用Unicode formar,这使得大多数解决方案都无用。

所以,我的问题是:剥离这些角色的最有效/ pythonic方式是什么?提前致谢!

编辑:文件名是Unicode格式而不是str!

答案

最快的方法是使用unicode.translate

unicode.translate

In [31]: _unistr = u'sdfjkh,/.,we/.,132?.?.23490/,/' # any random string.

In [48]: remove_punctuation_map = dict((ord(char), None) for char in '/*?:"<>|')

In [49]: _unistr.translate(remove_punctuation_map)Out[49]: 

u'sdfjkh,.,we.,132..23490,'

删除所有标点符号。

In [46]: remove_punctuation_map = dict((ord(char), None) for char in string.punctuation)

In [47]: _unistr.translate(remove_punctuation_map)
Out[47]: u'sdfjkhwe13223490'
另一答案

我们不知道您的数据如何:

但你可以使用re.sub

import re
your_string = re.sub(r'[\/*?:"<>|]',"","your_string")

以上是关于从Unicode字符串中删除文件名中禁用字符的最有效方法[复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从java中的字符串中删除无效的unicode字符

从字符串中删除特定 unicode 范围的字符

如何从雪花中删除 Unicode 替换字符

从 Python 字符串中删除零宽度空格 unicode 字符

JavaScript 从字符串中删除零宽度空间(unicode 8203)

如何从python中的unicode字符串中删除除数字和“,”之外的所有字符?