在 os.walk() 中使用 os.remove() for loop returns FileNotFoundError

using os.remove() in os.walk() for loop returns FileNotFoundError

我在 Anaconda 命令提示符下使用 Python 3.6.4。

我有一个函数使用 os.walk() 循环遍历根目录中的所有可用文件。

我的代码是:

def apply_to_files(pattern, base='.') :
    regex = re.compile(pattern)
    matches = []
    completed = ''
    for root, dirs, files in os.walk(base):
        for f in files:
            if regex.match(f):
                os.remove(f)

这具体触发了 FileNotFoundError

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'c.html'

我这样调用函数:

apply_to_files('c.*', 'C')

我所在的目录 运行 该函数的结构为:

root
 -C
  -c.html
  -c.txt
  -c.php
 -B
 -D

当我将 os.remove(f) 替换为 print(f) 时,returns 所有文件都如您所料。我在这里错过了什么?

files 变量仅包含文件名。尝试操作文件时,您必须添加完整路径:

for root, dirs, files in os.walk(base):
    for f in files:
        if regex.match(f):
            os.remove(os.path.join(root, f))