簡體   English   中英

在Python中如何將文件名中的某些字符列入白名單?

[英]In Python how to whitelist certain characters in a filename?

為了保護上載的圖像名稱,我想從除string.ascii_lettersstring.digits ,點和(一個)空格之外的所有內容中刪除圖像的文件名。

因此,我想知道針對其他字符檢查文本的最佳方法是什么?

import re
import os
s = 'asodgnasAIDID12313%*(@&(!$ 1231'
result = re.sub('[^a-zA-Z\d\. ]|( ){2,}','',s )
if result =='' or os.path.splitext(result)[0].isspace():
    print "not a valid name"
else:
    print "valid name"

編輯:

更改了它,因此它也將只將一個空白列入白名單+添加了導入

不知道這是否是您需要的,請嘗試一下:

import sys, os

fileName, fileExtension = os.path.splitext('image  11%%22.jpg')
fileExtension = fileExtension.encode('ascii', 'ignore')
fileName = fileName.encode('ascii', 'ignore')
if fileExtension[1:] in ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'tga']:
    fileName = ''.join(e for e in fileName if e.isalnum())
    print fileName+fileExtension
    #image1122.jpg
else:
    print "Extension not supported"

isalnum()

https://docs.python.org/2/library/stdtypes.html#str.isalnum

我不會為此使用正則表達式。 唯一棘手的要求是單個空格,但這也可以做到。

import string

whitelist = set(string.ascii_letters + string.digits)
good_filename = "herearesomelettersand123numbers andonespace"
bad_filename = "symbols&#! and more than one space"

def strip_filename(fname, whitelist):
    """Strips a filename

    Removes any character from string `fname` and removes all but one
    whitespace.
    """

    whitelist.add(" ")

    stripped = ''.join([ch for ch in fname if ch in whitelist])
    split = stripped.split()
    result = " ".join([split[0], ''.join(split[1:])])
    return result

然后調用:

good_sanitized = strip_filename(good_filename, whitelist)
bad_sanitized = strip_filename(bad_filename, whitelist)
print(good_sanitized)
# 'herearesomelettersand123numbers andonespace'
print(bad_sanitized)
# 'symbols andmorethanonespace'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM