fnmatch 找不到“&”字符

fnmatch not finding "&" character

我是 Python 的新手,如果我废话或提出愚蠢的问题,我深表歉意。我的目标是将包含字符串“&”的特定目录中的任何文件名重命名为“x”。 到目前为止,我已经尝试让 python 查找这些文件并打印它们的文件名,但得到一个空输出,即使有一个包含字符串“&”的测试文件。

这是我的代码:

import fnmatch
import os

for file in os.listdir('B:\Music'):
    if fnmatch.fnmatch(, '*&'):
        print(file)

您要匹配的字符前后需要 *

import fnmatch
import os

for file in os.listdir('B:\Music'):
    if fnmatch.fnmatch(file, '*&*'):
        print(file)

解释:

* 匹配所有内容,因此:

*& 匹配每个以 &

结尾的字符串

&* 匹配每个以 &

开头的字符串

*&* 匹配每个包含 &

的字符串
import os

directory = 'B:\Music'
for basename in os.listdir(directory):
    if '&' in basename:
        os.rename(
            os.path.join(directory, basename), 
            os.path.join(directory, basename.replace('&', 'x'))
        )

正如我在主要 post 评论中所说,您不需要 fnmatch,因为您只想判断基名是否包含 &。使用 in 应该足够了。

PS:言归正传,以后可以参考@adamgy的回答,得到正确的fnmatch匹配方式