在Python中查找目录下最新的文件夹
我想写一个自动化脚本,让它进入最近创建的文件夹。
下面是我写的一些代码:
import datetime, os, shutil
today = datetime.datetime.now().isoformat()
file_time = datetime.datetime.fromtimestamp(os.path.getmtime('/folders*'))
if file_time < today:
changedirectory('/folders*')
我不太确定怎么才能检查到最新的时间戳。有没有什么建议?
谢谢!
6 个回答
12
这里有一句简单的代码:
directory = 'some/path/to/the/main/dir'
max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime)
24
一行代码来找到最新的
# Find latest
import os, glob
max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)
一行代码来找到第 n 个最新的
# Find n'th latest
import os, glob
sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-n]
76
在大多数操作系统和文件系统中,其实并没有“创建时间”的记录。你看到的mtime
是文件或文件夹的修改时间(比如说,在一个文件夹里创建一个文件会更新这个文件夹的修改时间)。而ctime
(如果有的话)是指最新的inode变化时间(这会在创建或删除子文件夹时更新)。
假设你只关心“最后修改时间”(而你在问题中提到的“创建时间”只是个错误),你可以找到当前目录下的所有子文件夹:
import os
all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]
然后获取最新修改的那个子文件夹(在Python 2.5或更高版本中):
latest_subdir = max(all_subdirs, key=os.path.getmtime)
如果你需要在其他目录操作,其实也没什么不同,比如:
def all_subdirs_of(b='.'):
result = []
for d in os.listdir(b):
bd = os.path.join(b, d)
if os.path.isdir(bd): result.append(bd)
return result
这里的latest_subdir
赋值不会改变,all_subdirs
是任何路径的列表(无论是文件夹还是文件),那条max
调用会得到最后修改的那个。