Python中过滤Windows文件名中的非法字符

本文介绍了在不同编程语言中处理文件名的方法,包括去除或替换非法字符,并讨论了如何确保文件名符合系统规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上有三种写法:

第一种(所有非法字符都不转义):
def setFileTitle(self,title):      
            fileName = re.sub('[\/:*?"<>|]','-',title)#去掉非法字符  
            self.file = open(fileName + ".txt","w+")  

\非法字符必须转义,否则\/被解释为/

第二种(所有非法字符都转义):
def validateTitle(title):
    rstr = r"[\/\\\:\*\?\"\<\>\|]"  # '/ \ : * ? " < > |'
    new_title = re.sub(rstr, "_", title)  # 替换为下划线
    return new_title
第三种(部分非法字符转义):
private static Pattern FilePattern = Pattern.compile("[\\\\/:*?\"<>|]");  
public static String filenameFilter(String str) {  
    return str==null?null:FilePattern.matcher(str).replaceAll("");  
}  
最佳写法:
pattern=r'[\\/:*?"<>|\r\n]+'

在[]中*不需要转义,此时*不表示多次匹配,就表示本身的字符

注意

文件夹名和文件名的字串中可以包含不是26个字母和数字的特殊字符,例如“┽┾┿╀╂╁╃ ”这个字串是可以命名成功的的,另一方面文件名首尾的空格要去掉,首尾的点号要去掉,特殊的空白符(如换行符和制表符)也要去掉。

python中strip(),lstrip(),rstrip()可以取出两端的某些特殊的字符

### 使用 Python 移除 Windows 文件名中的非法字符 为了确保文件名Windows 系统上合法有效,在创建文件前应当移除或替换掉不允许存在的特殊字符。下面提供了一种方法,利用正则表达式来处理这个问题。 #### 方法一:简单替换法 此方式采用 `re` 模块提供的功能,将所有不符合规定的字符统一替换成指定符号(这里选用连字符 `-`),并保证最终得到的文件名既安全又具有一定的可读性: ```python import re def set_file_title(title): file_name = re.sub(r'[\\/:*?"<>|]', '-', title) # 去掉非法字符[^1] with open(file_name + ".txt", "w+") as f: pass # 创建新文件 ``` 这种方法适用于大多数场景下的基本需求,能够有效地防止因非法字符而导致的操作失败。 #### 方法二:综合校验与修正方案 更进一步的做法是在上述基础上增加额外的安全措施,比如去除前后多余的空白符以及控制最大长度等,从而使得生成后的文件名更加规范可靠: ```python import re def clean_filename(filename): filename = re.sub(r'[\\/:"*?<>|]', '_', filename) # 替换非法字符为下划线[^3] filename = filename.strip() # 清理首尾可能残留的空间字符 if not filename or len(filename)>255: # 验证非空且不超过操作系统允许的最大长度 raise ValueError('Invalid filename') try: with open(f"{filename}.txt", 'w') as _f: pass # 尝试打开/新建文件测试有效性 except OSError as e: print(e) clean_filename("example<file>name?.txt") ``` 该函数不仅实现了对非法字符的有效过滤,还加入了必要的边界条件判断,提高了程序健壮性和用户体验度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值