如何在整个硬盘中搜索所有pdf文件?

时间:2016-10-18 19:53:25

标签: python windows python-3.x

正如标题所示,我想让python 3.5搜索我的根(' C:\') 对于pdf文件,然后将这些文件移动到特定文件夹。 这个任务很容易分成2个: 1.在我的根目录中搜索带有pdf扩展名的文件。 2.将它们移动到特定文件夹。

现在。我知道如何搜索特定的文件名,但不知道具有特定扩展名的多个文件。

import os

print('Welcome to the Walker Module.')
print('find(name, path) or find_all(name, path)')

def find(name, path):
for root, dirs, files in os.walk(path):
    print('Searching for files...')
    if name in files:
        return os.path.join(root, name)

def find_all(name, path):
result = []
for root, dirs, files in os.walk(path):
    print('Searching for files...')
    if name in files:
        result.append(os.path.join(root, name))
return result

这个小程序会找到特定文件的第一个或所有位置。 但是,由于缺乏python和编程知识,我不能修改它以便能够搜索pdf文件。

很想知道从这里去哪里。

总结一下,

  1. 在根目录中搜索所有pdf文件。
  2. 将这些文件移动到特定位置。让我们说' G:\ Books'
  3. 提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以从python 3.5开始使用glob。它支持递归搜索。

  

如果recursive为true,则模式“**”将匹配任何文件以及零个或多个目录和子目录。如果模式后跟os.sep,则只有目录和子目录匹配。

因此您可以像

一样使用它
import glob
from os import path
import shutil

def searchandmove(wild, srcpath, destpath):

    search = path.join(srcpath,'**', wild)

    for fpath in glob.iglob(search, recursive=True):
        print(fpath)
        dest = path.join(destpath, path.basename(fpath))
        shutil.move(fpath, dest)

searchandmove('*.pdf', 'C:\\', 'G:\\Books')

用最少的字符串争吵。对于大型搜索,例如从文件系统的根目录,它可能需要一段时间,但我确信任何方法都会有这个问题。

仅在linux上测试,但在Windows上应该可以正常工作。无论你传递的是什么destpath必须已经存在。

答案 1 :(得分:0)

您的find_all函数非常接近最终结果。 循环浏览文件时,可以使用os.path.splitext检查其扩展名,如果是.pdf文件,则可以使用shutil.move移动它们

这是一个遍历源目录树的示例,检查每个文件的扩展名,如果匹配,则将文件移动到目标目录:

import os
import shutil


def move_all_ext(extension, source_root, dest_dir):
    # Recursively walk source_root
    for (dirpath, dirnames, filenames) in os.walk(source_root):
        # Loop through the files in current dirpath
        for filename in filenames:
            # Check file extension
            if os.path.splitext(filename)[-1] == extension:
                # Move file
                shutil.move(os.path.join(dirpath, filename), os.path.join(dest_dir, filename))


# Move all pdf files from C:\ to G:\Books
move_all_ext(".pdf", "C:\\", "G:\\Books")