【问题标题】:fnmatch not finding "&" characterfnmatch 找不到“&”字符
【发布时间】:2020-10-27 23:08:58
【问题描述】:

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

这是我的代码:

import fnmatch
import os

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

【问题讨论】:

  • 在这种情况下,您可能不需要fnmatch。让我在下面提供一个答案。

标签: python fnmatch


【解决方案1】:
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'))
        )

正如我在主帖评论中所说,您不需要fnmatch,因为您只想知道基本名称是否包含&。使用in 就足够了。

PS:回到你的标题,你可以参考@adamgy 的回答来获得正确的方法来使用fnmatch 来匹配未来的东西。

【讨论】:

    【解决方案2】:

    您需要在您尝试匹配的字符前后添加*

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

    说明:

    * 匹配所有内容,因此:

    *& 匹配每个以& 结尾的字符串

    &* 匹配每个以& 开头的字符串

    *&* 匹配每个包含& 的字符串

    【讨论】:

    • 哦,谢谢!那解决了。我可以用什么替换 if 语句,以便将“&”重命名为“x”?
    • 如果我的回答有帮助,请考虑使用帖子旁边的大复选标记将其标记为已接受。要重命名文件,您可以执行 new_filename = file.replace('&', 'x') 之类的操作,然后执行 os.rename(file, new_filename)
    • 我收到以下错误:"FileNotFoundError: [WinError 2] 系统找不到指定的文件:" 我认为它可能在错误的位置搜索文件(?。我读过一些关于使用(os.path.join)的东西,或者这不相关。
    • 是的,因为“file”只包含文件名,但是如果文件不在当前目录中,则需要添加目录,以便重命名方法可以找到文件。你可以使用 os.path.join() 来实现,甚至可以使用简单的字符串操作
    • 我能得到一个关于如何定义文件路径的例子吗?无论是使用 os.path.join() 还是使用您提到的简单字符串 [ 因为,正如我所说,我对 python 很陌生 :,) ]
    猜你喜欢
    • 2013-12-17
    • 2014-11-16
    • 2012-06-09
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2012-04-20
    相关资源
    最近更新 更多