正如标题所示,我想让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文件。
很想知道从这里去哪里。
总结一下,
提前致谢。
答案 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")