3 回答

TA貢獻1805條經(jīng)驗 獲得超9個贊
您可以查看Django框架,了解它們?nèi)绾螐娜我馕谋緞?chuàng)建“子彈”。slug是URL和文件名友好的。
Django文本工具定義了一個函數(shù),slugify()這可能是此類事情的黃金標(biāo)準(zhǔn)。本質(zhì)上,它們的代碼如下。
def slugify(value):
"""
Normalizes string, converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
"""
import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())
value = unicode(re.sub('[-\s]+', '-', value))
還有更多,但我不予贅述,因為它不解決節(jié)段化,而是逃脫。

TA貢獻1946條經(jīng)驗 獲得超3個贊
只是為了使事情更加復(fù)雜,不能保證僅通過刪除無效字符就可以獲得有效的文件名。由于不同文件名上允許的字符不同,因此保守的方法可能最終將有效名稱變成無效名稱。在以下情況下,您可能需要添加特殊處理:
該字符串是所有無效字符(留空字符串)
您最終得到一個具有特殊含義的字符串,例如“。”。要么 ”..”
在Windows上,某些設(shè)備名稱被保留。例如,您無法創(chuàng)建名為“ nul”,“ nul.txt”(或?qū)嶋H上是nul.anything)的文件。保留名稱為:
CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9
您可以通過在文件名前添加一些字符串來解決這些問題,這些文件名永遠不會導(dǎo)致這些情況之一,并去除無效字符。
添加回答
舉報