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
匹配方式
我是 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
匹配方式