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