Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将具有不同扩展名的最旧文件名移动到公用文件夹。python_Python - Fatal编程技术网

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

将具有不同扩展名的最旧文件名移动到公用文件夹。python,python,Python,我有一个包含15.jpg文件和15.pdf文件的文件夹。文件名相同,只是扩展名不同。示例ABC123.jpg和ABC123.pdf。在过去的几天里,我花了大部分时间尝试使用shutil将最旧的.pdf文件移动到新文件夹,然后找到匹配的.jpg文件,并将其移动到与.pdf相同的文件夹中。我能够移动最旧的文件或移动给定类型的所有文件。只是无法获取特定类型中最旧的。我尝试将all.pdfs移动到一个新文件夹1,将all.jpgs移动到一个新文件夹2,然后将最旧的文件夹从每个文件夹移动到一个公共文件夹。

我有一个包含15.jpg文件和15.pdf文件的文件夹。文件名相同,只是扩展名不同。示例ABC123.jpg和ABC123.pdf。在过去的几天里,我花了大部分时间尝试使用shutil将最旧的.pdf文件移动到新文件夹,然后找到匹配的.jpg文件,并将其移动到与.pdf相同的文件夹中。我能够移动最旧的文件或移动给定类型的所有文件。只是无法获取特定类型中最旧的。我尝试将all.pdfs移动到一个新文件夹1,将all.jpgs移动到一个新文件夹2,然后将最旧的文件夹从每个文件夹移动到一个公共文件夹。然而,它们并不总是匹配的。最旧的.jpg可能与最旧的.pdf不同。我相信有一个简单的解决办法,我只是在循环中工作了这么长时间,我再也看不到穿过树林的森林了

使用
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'))

我相信您可以处理处理移动文件的其余代码。

我从中找到了
树中最旧的\u文件


下面是我如何使它工作的

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)

请发布您需要帮助的代码。看看如何在一开始这不起作用。我收到了回溯错误。我对代码做了一点修改,使其能够正常工作。@user9679329感谢您的反馈。你做了什么改变?我会更新答案。如果这个答案是正确的,你会认为标记是公认的答案吗?
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)