操作系统删除不太适合工作

2024-10-04 03:18:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个PDF生成程序。其中一个功能是合并所有PDF并删除之后的所有片段。我一直工作得很好,直到我改变了PDF的路径。函数如下:

def pdf_cleanup(name):
    files_dir = '/root/PycharmProjects/ReportApp/FML/Pdf_Docs'

    xx = [f for f in os.listdir(files_dir) if f.endswith("pdf")]

    for f in xx:
        if f.startswith(name):
            pass
        else:
            os.remove(f)
    return

看看files_dir变量,如果我把它放回一个目录,那么它看起来像这个files_dir = '/root/PycharmProjects/ReportApp/FML',它工作得很好。当我试图在Pdf_Docs目录中使用它时,我错误地说“name_of_Pdf”不存在,但它确实存在。在

回溯:

^{pr2}$

是不是有什么愚蠢而渺小的东西让我忽略了??我不明白为什么换一个文件夹会坏掉它。在


Tags: nameindocsforpdfosdirroot
2条回答

os.listdir()只提供文件名,而不是它们的路径,即:

>>> 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']

因此,当您对其中一个文件名调用os.remove()时,它会在当前工作目录中查找该文件,而不是在files_dir中。在

解决方案简单明了:连接files_dirf以获得完整路径:

^{pr2}$

附带说明:一个测试在列表理解中,另一个测试在for循环中。你也可以把这两个都放在列表中:

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))

xx是文件名的列表,而不是文件路径。将路径与目录合并如下:os.remove(os.path.join(files_dir, f))

相关问题 更多 >