Python shutil 文件移动 os 遍历循环

Python shutil file move in os walk for loop

下面的代码在一个目录中搜索任何 PDF,对于它找到的每个 PDF,它都会移动到附加了“_folder”的相应文件夹中。 能不能用更简单的词来表达呢?这几乎是不可读的。此外,如果找不到文件夹,它会破坏 PDF!

import os
import shutil

    for root, dirs, files in os.walk(folder_path_variable):
        for file1 in files:
            if file1.endswith('.pdf') and not file1.startswith('.'):
                filenamepath = os.path.join(root, file1)
                name_of_file = file1.split('-')[0]
                folderDest = filenamepath.split('/')[:9]
                folderDest = '/'.join(folderDest)
                folderDest = folderDest + '/' + name_of_file + '_folder'
                shutil.move(filenamepath2, folderDest)

我真的想在构造变量 name_of_file 后遍历同一目录,如果该变量在文件夹名称中,它会执行移动。但是我在尝试嵌套另一个 for 循环时遇到了问题...

我会尝试这样的事情:

for root, dirs, files in os.walk(folder_path_variable):
    for filename in files:
        if filename.endswith('.pdf') and not filename.startswith('.'):
            filepath = os.path.join(root, filename)
            filename_prefix = filename.split('-')[0]
            dest_dir = os.path.join(root, filename_prefix + '_folder')
            if not os.path.isdir(dest_dir):
                os.mkdir(dest_dir)
            os.rename(filepath, os.path.join(dest_dir, filename))

John Zwinck 的回答是正确的,除了它包含一个错误,如果目标文件夹已经存在,则会在该文件夹中创建一个文件夹并将 pdf 移动到该位置。我已经通过在内部 for 循环(for filename in files)中添加一个 'break' 语句来解决这个问题。

下面的代码现在可以正确执行。查找以 pdf 的前几个字符命名的文件夹(以“-”为前缀),尾部为“_folder”,如果存在,则将 pdf 移入其中。如果没有,则使用前缀名称和“_folder”创建一个,并将 pdf 移入其中。

for root, dirs, files in os.walk(folder_path_variable):
    for filename in files:
        if filename.endswith('.pdf') and not filename.startswith('.'):
            filepath = os.path.join(root, filename)
            filename_prefix = filename.split('-')[0]
            dest_dir = os.path.join(root, filename_prefix + '_folder')
            if not os.path.isdir(dest_dir):
                os.mkdir(dest_dir)
            os.rename(filepath, os.path.join(dest_dir, filename))
    break