擅长:python、mysql、java
<p><code>os.listdir()</code>只提供文件名,而不是它们的路径,即:</p>
<pre><code>>>> files_dir = "/home/bruno/Work/blookup/src/project/blookcore"
>>> [f for f in os.listdir(files_dir) if f.endswith(".py")]
['tasks.py', 'posts.py', 'models.py', '__init__.py', 'signals.py', 'urls.py', 'utils.py', 'translation.py', 'views.py', 'forms.py', 'fields.py', 'storages.py', 'admin.py', 'managers.py']
</code></pre>
<p>因此,当您对其中一个文件名调用<code>os.remove()</code>时,它会在当前工作目录中查找该文件,而不是在<code>files_dir</code>中。在</p>
<p>解决方案简单明了:连接<code>files_dir</code>和<code>f</code>以获得完整路径:</p>
^{pr2}$
<p>附带说明:一个测试在列表理解中,另一个测试在for循环中。你也可以把这两个都放在列表中:</p>
<pre><code>xx = [
f for f in os.listdir(files_dir)
if f.endswith("pdf") and not f.startswith(name)
]
for f in xx:
os.remove(os.path.join(files_dir, f))
</code></pre>