Python fnmatch not finding“不匹配”&&引用;性格
我对Python比较陌生,所以如果我删掉任何术语或提出愚蠢的问题,我感到抱歉。我的目标是将包含字符串“&”的特定目录中的任何文件名重命名为“x”。 到目前为止,我已经尝试让python查找这些文件并打印它们的文件名,但返回一个空输出,即使有一个包含字符串“&”的测试文件 这是我的密码:Python fnmatch not finding“不匹配”&&引用;性格,python,fnmatch,Python,Fnmatch,我对Python比较陌生,所以如果我删掉任何术语或提出愚蠢的问题,我感到抱歉。我的目标是将包含字符串“&”的特定目录中的任何文件名重命名为“x”。 到目前为止,我已经尝试让python查找这些文件并打印它们的文件名,但返回一个空输出,即使有一个包含字符串“&”的测试文件 这是我的密码: import fnmatch import os for file in os.listdir('B:\\Music'): if fnmatch.fnmatch(, '*&'):
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)
说明:
*
匹配所有内容,因此:
*&
匹配以&
&*
匹配以&
*&*
匹配包含导入操作系统的每个字符串
目录='B:\\Music'
对于os.listdir(目录)中的basename:
如果basename中有“&”:
重命名(
join(目录,基本名称),
join(目录,basename.replace('&',x'))
)
正如我在主要帖子评论中所说,您不需要fnmatch
,因为您只想知道basename是否包含&
。在中使用就足够了
PS:回到你的标题,你可以参考@adamgy的答案,以获得正确的方式使用fnmatch
来匹配未来的内容。哦,谢谢!这就解决了。如果我的答案是有用的,那么如果我的答案是有用的,请考虑将它标记为在帖子旁边的大选中标记。要重命名该文件,可以执行诸如new_filename=file.replace('&',x'),然后执行os.rename(file,new_filename)之类的操作。我遇到以下错误:“FileNotFoundError:[WinError 2]系统找不到指定的文件:”我想它可能在错误的位置搜索该文件(?。我读到了一些关于使用(os.path.join)的内容)是的,因为“file”仅包含文件名,但如果文件不在当前目录中,则还需要添加目录,以便重命名方法可以找到该文件。可以使用os.path.join()执行此操作,或者甚至使用简单的字符串操作,我可以得到一个如何定义文件路径的示例吗?可以使用os.path.join()或您提到的简单字符串[因为,正如我所说,我对python非常陌生:,)]在这种情况下,您可能不需要fnmatch
。让我在下面提供一个答案。