[問題] 有效、不違法的存檔路徑字元?
講的是Windows系統
想排除不可列印字元、16進制
但中文、日文、全形、合法符號都能保留
違法字這邊無法貼 因為ptt也貼不上來...
補個違法字樣本: http://i.imgur.com/c9SvoRY.jpg
最後面那串箭頭符號 網頁顯示
有試過了一些方法
sys.getfilesystemencoding() # 系統預設編碼
str.maketrans('', '', '\/*?:"<>|') # 排除微軟預設不合法字元
# 只接受ASCII可顯示字
valid_chars = "-_.() %s%s" % (string.printable, string.ascii_letters)
filename = ''.join(c for c in targetString if c in valid_chars)
其他16進制排除的方法也試過 沒效 估計該違法字其實不是16進制字元
沒梗了 能推薦好用的方法嗎?
語言版本: python 3以上
---------------------------------------------------------------
經過一番search 目前大概用了個替代解法如下
簡單說明下
因為python做系統編碼時
大概會把escape等unprintable字轉換成16進制
ex: 手邊實際遇到到的有 \x1b \x08 估計長度是4
所以先用repr 把違法字轉成可識別的hex str
接著迴圈撈char 針對\、x去排除4碼
大概上初步就完成了
(縮排請自行處理)
def format_filename(_titleName):
_titleName = repr(_titleName)
findSlash = False
findX = False
tmpCount = 0
totalName = ''
for i, tmpChr in enumerate(_titleName):
if tmpChr == '\\':
findSlash = True
continue
if findSlash == True:
if tmpChr == 'x':
findX = True
continue
if tmpCount >= 2:
findSlash = False
findX = False
tmpCount = 0
if findSlash is True and findX is True:
tmpCount = tmpCount + 1
continue
totalName = totalName + tmpChr
return totalName
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.46.215.208
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1495514710.A.E39.html
※ 編輯: pkmu8426 (114.46.215.208), 05/23/2017 12:52:36
→
05/23 13:59, , 1F
05/23 13:59, 1F
推
05/23 15:10, , 2F
05/23 15:10, 2F
→
05/23 15:11, , 3F
05/23 15:11, 3F
→
05/23 15:12, , 4F
05/23 15:12, 4F
推
05/23 18:22, , 5F
05/23 18:22, 5F
還沒試 不過看來經過string.printable
中文、日文 漢字就不行了
※ 編輯: pkmu8426 (114.46.223.227), 05/27/2017 12:15:27