将具有不同扩展名的最旧文件名移动到公用文件夹。 Python

时间:2018-06-29 20:54:11

标签: python

我有一个包含15个.jpg文件和15个.pdf文件的文件夹。文件名相同,只是扩展名不同。示例ABC123.jpg和ABC123.pdf。最近几天,我花了大部分时间尝试使用shutil将最旧的.pdf文件移动到新文件夹,然后找到匹配的.jpg文件并将其移动到与.pdf相同的文件夹。我能够移动最早的文件或移动给定类型的所有文件。只是无法获得最古老的特定类型。我尝试将所有.pdfs移至新的folder1,然后将所有.jpgs移至新的folder2,然后将每个文件夹中的最旧的移至一个公共文件夹。但是,它们并不总是匹配。最旧的.jpg可能与最旧的.pdf不同。我敢肯定有一个简单的解决方案,我一直在绕圈工作,直到我再也看不到穿过树林的森林。

3 个答案:

答案 0 :(得分:0)

使用os.path.getmtime函数作为对文件进行排序的键。

import os
def oldest_file(dir, type):
    return min([name for name in os.listdir(dir) if name.endswith(type)], key=lambda name: os.path.getmtime(os.path.join(dir, name)))
print(oldest('/your/folder', '.jpg'))

如果您需要搜索整个树,请使用os.walk而不是os.listdir

import os
from itertools import chain
def oldest_file(dir, type):
    return min(list(chain(*[[os.path.join(root, file) for file in files if file.endswith(type)] for root, _, files in os.walk(dir)])), key=lambda file: os.path.getmtime(file))
print(oldest('/your/folder', '.jpg'))

我确定您可以处理其余有关移动文件的代码。

答案 1 :(得分:0)

我从this answer找到了oldest_file_in_tree

import os
import shutil

def oldest_file_in_tree(rootfolder, extension=".avi"):
    return min(
        (os.path.join(dirname, filename)
        for dirname, dirnames, filenames in os.walk(rootfolder)
        for filename in filenames
        if filename.endswith(extension)),
        key=lambda fn: os.stat(fn).st_mtime)

oldest_pdf = oldest_file_in_tree('/var/somedir', '.pdf')
name = oldest_pdf[:4]
matching_jpg = '{}.jpg'.format(name)

shutil.move("/var/somedir/{}.pdf".format(name), "path/to/new/destination/{}.pdf".format(name))
shutil.move("/var/somedir/{}.jpg".format(name), "path/to/new/destination/{}.jpg".format(name))

答案 2 :(得分:0)

这就是我使它工作的方式。

import os, shutil
import glob

todir = '/var/somedir/'
def oldest_file_in_tree(rootfolder, extension=".pdf"):
    return min(
        (os.path.join(dirname, filename)
        for dirname, dirnames, filenames in os.walk(rootfolder)
        for filename in filenames
        if filename.endswith(extension)),
        key=lambda fn: os.stat(fn).st_mtime)

oldest_g3d = oldest_file_in_tree('/var/somedir/', '.pdf')
name = oldest_pdf[:-4]
matching_jpg = '{}.jpg'.format(name)

shutil.move(oldest_pdf, todir)
shutil.move(matching_jpg, todir)