python判断新定义的文件名是否合法

本文最后更新于 2024年5月16日。

’/‘有中英文的区别吗

是的,中英文的 ‘/‘ 是不同的字符,它们的 Unicode 编码也不同。

英文的 ‘/‘ 字符的 Unicode 编码是 0x002F,用于表示路径分隔符或 URL 中的路径分隔符。

而中文的 ‘/‘ 字符是全角字符,通常在输入法中通过 Shift + 7 或 Shift + 斜杠等方式输入,它的 Unicode 编码是 0xFF0F。

由于中英文的 ‘/‘ 字符是不同的字符,因此在处理文件名时,需要分别处理这两种情况。如果你使用的是 Python 的字符串处理函数,例如 replace() 函数,需要注意它只能替换字符串中的某个子串,如果要替换中文的 ‘/‘,需要使用对应的 Unicode 编码进行替换。

例如,如果你要将中文的 ‘/‘ 替换为英文的 ‘-‘,可以使用以下代码:

filename = filename.replace('\uFF0F', '/')
filename = filename.replace('/', '-')

第一行代码将字符串中的中文 ‘/‘ 替换为英文 ‘/‘,第二行代码将英文的 ‘/‘ 替换为 ‘-‘。注意,中文的 ‘/‘ 在字符串中需要使用 Unicode 编码来表示,Unicode 编码可以使用 \uXXXX 的形式来表示,其中 XXXX 是该字符的 Unicode 编码值的十六进制表示。

python判断新定义的文件名是否合法

要判断新定义的文件名是否合法,你需要知道哪些字符是不允许出现在文件名中的。在Windows操作系统中,以下字符是不允许出现在文件名中的:

\ / : * ? " < > |

在Linux和Unix系统中,以下字符是不允许出现在文件名中的:

/

因此,你可以使用以下Python函数来判断文件名是否合法:

def is_valid_filename(filename):
# 定义非法字符
illegal_chars_windows = r'[\\/:"*?<>|]'
illegal_chars_linux = r'/'
# 判断文件名中是否包含非法字符
if re.search(illegal_chars_windows, filename) or re.search(illegal_chars_linux, filename):
return False
else:
return True

这个函数使用了Python的re模块来定义非法字符的正则表达式,并使用re.search()函数来查找文件名中是否包含非法字符。如果文件名中包含非法字符,则返回False,否则返回True。

例如,你可以使用以下代码来测试这个函数:

filename = "my/file:name.txt"
if is_valid_filename(filename):
print("文件名合法")
else:
print("文件名不合法")

在这个例子中,由于文件名中包含非法字符,因此输出结果为“文件名不合法”。

**文件名中不能包含的字符有哪些?**
-   文件名不包含以下任何字符:“(双引号)、*(星号)、<(小于)、>(大于)、? (问号)、\(反斜杠)、/(正斜杠)、|(竖线)、:(冒号)。
-   文件名不要以空格、句号、连字符或下划线开头或结尾。
-   文件名不能包含Windows保留的任何名称。 Windows系统中保留名称包括:CON、PRN、 AUX 、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8 和 LPT9。
-   文件名最长可以使用255个字符。
-   避免使用空格;请改用连字符或下划线。 文件名或文件夹末尾的空格是不可接受的。
-   不要在文件名中使用表情符号。

以下是一个Python函数,可以将文件名中的非法字符替换为“-”:

import re
def sanitize_filename(filename):
# 定义非法字符的正则表达式
illegal_chars = r'[\\/:"*?<>|]+'
# 将非法字符替换为"-"
return re.sub(illegal_chars, '-', filename)

这个函数使用了Python的re模块来定义非法字符的正则表达式,并使用re.sub()函数将非法字符替换为“-”。你可以调用这个函数来处理文件名,例如:

filename = "my/file:name.txt"
sanitized_filename = sanitize_filename(filename)
print(sanitized_filename)  # 输出 "my-file-name.txt"

注意,这个函数只会替换文件名中的非法字符,不会修改文件的实际名称。如果你想要修改文件的名称,你需要使用操作系统提供的函数来重命名文件。

这次所不同的,是在*前面加了~。这个是转义的意思,也就是将它原有的意义去掉,变为只是代表*