2

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

这是我的代码:

import fnmatch
import os

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

2 回答 2

1

您需要*在要匹配的字符之前和之后:

import fnmatch
import os

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

解释:

*匹配所有内容,因此:

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

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

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

于 2020-07-07T16:23:45.167 回答
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,因为您只想判断 basename 是否包含&. 使用in应该足够了。

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

于 2020-07-07T17:03:50.113 回答