Python中如何过滤特殊文件名
请问如何过滤爬虫爬回来,有特殊符号的标题的数据呢,
想用标题建立文件夹,
但有时候会遇特特殊字元无法建立.
除了用 replace , 还有什么方法呢?
Python中如何过滤特殊文件名
8 回复
CRC32 Hash 后作为文件夹名
在Python里过滤特殊文件名,主要就是处理那些带特殊字符或者系统保留字的名字,比如空格、中文、nul.txt这种。搞这个最直接的办法就是用os和re模块。
最关键的思路是:先列出目录里所有文件,然后用正则表达式匹配出你想过滤掉的那些特殊模式。比如Windows下不能有<>:"/\|?*这些字符,也不能是CON、PRN这些设备名。
下面这个函数应该能解决大部分问题:
import os
import re
def filter_special_files(directory):
"""
过滤指定目录中的特殊文件名。
参数:
directory: 要扫描的目录路径
返回:
list: 过滤后的正常文件名列表
"""
# Windows文件名非法字符和保留名
illegal_chars = r'[<>:"/\\|?*]'
reserved_names = {
'CON', 'PRN', 'AUX', 'NUL',
'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9'
}
normal_files = []
try:
for filename in os.listdir(directory):
# 检查是否包含非法字符
if re.search(illegal_chars, filename):
continue
# 检查是否为保留名(不区分大小写)
name_without_ext = os.path.splitext(filename)[0].upper()
if name_without_ext in reserved_names:
continue
# 检查文件名是否以点或空格开头/结尾
if filename.startswith('.') or filename.endswith('.') or filename.strip() != filename:
continue
normal_files.append(filename)
except FileNotFoundError:
print(f"错误:目录 '{directory}' 不存在")
except PermissionError:
print(f"错误:没有权限访问目录 '{directory}'")
return normal_files
# 使用示例
if __name__ == "__main__":
target_dir = "." # 当前目录
filtered = filter_special_files(target_dir)
print("过滤后的文件列表:")
for file in filtered:
print(f" - {file}")
这个函数主要做了三件事:
- 用正则
[<>:"/\\|?*]匹配Windows非法字符 - 检查文件名(去掉扩展名后)是不是
CON、NUL这类系统保留名 - 排除以点开头/结尾或有首尾空格的文件
如果你在Linux/macOS下用,主要关注第1和第3步就行,因为保留名是Windows特有的。要调整过滤规则的话,改illegal_chars和reserved_names这两个变量。
简单说就是匹配特殊模式然后跳过这些文件。
base64 一下非扩展名部分?
额,没有fnameescape() 么?
特殊符号转译呗。。还能有啥办法
如果用 md5 还是 crc 当为文件夹名,这样资料多很难识别.
不知是否可以用排除特殊服号的方式来做?
刚学 python,不是很熟.
这篇文章我看过,
不过这样的做法似乎无法保存中文,日文等文件名

