Найдите самую новую папку в каталоге на Python - PullRequest
21 голосов
/ 06 января 2010

Я пытаюсь использовать автоматический скрипт, который входит в самую последнюю созданную папку.

У меня есть код ниже

import datetime, os, shutil 

today = datetime.datetime.now().isoformat() 
file_time = datetime.datetime.fromtimestamp(os.path.getmtime('/folders*')) 

if file_time < today: 
    changedirectory('/folders*') 

Я не уверен, как получить это, чтобы проверить последнюю отметку времени с этого момента. Есть идеи?

Спасибо

Ответы [ 5 ]

49 голосов
/ 06 января 2010

В большинстве ОС / файловых систем нет фактического следа "времени создания": mtime означает, что файл или каталог были изменены (например, создание файла каталог обновляет mtime каталога) - и с ctime, когда предлагается, время последнего изменения inode (поэтому оно будет обновляться путем создания или удаления подкаталога).

Предполагая, что вы в порядке, например, «последний измененный» (и использование вами «созданного» в вопросе было просто ошибкой), вы можете найти (например, все подкаталоги текущего каталога:

import os

all_subdirs = [d for d in os.listdir('.') if os.path.isdir(d)]

и получите последнюю версию mtime (в 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 получает последний измененный).

7 голосов
/ 19 августа 2015

Один лайнер, чтобы найти последние

# Find latest
import os; import glob
max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)

Один лайнер, чтобы найти n'th последний

# Find n'th latest
import os; import glob
sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-n]
6 голосов
/ 27 июня 2013

И быстрый однострочный:

directory = 'some/path/to/the/main/dir'
max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime)
1 голос
/ 06 января 2010

вот один из способов найти последний каталог

import os
import time
import operator
alist={}
now = time.time()
directory=os.path.join("/home","path")
os.chdir(directory)
for file in os.listdir("."):
    if os.path.isdir(file):
        timestamp = os.path.getmtime( file )
        # get timestamp and directory name and store to dictionary
        alist[os.path.join(os.getcwd(),file)]=timestamp

# sort the timestamp 
for i in sorted(alist.iteritems(), key=operator.itemgetter(1)):
    latest="%s" % ( i[0])
# latest=sorted(alist.iteritems(), key=operator.itemgetter(1))[-1]
print "newest directory is ", latest
os.chdir(latest)
0 голосов
/ 06 января 2010
import os, datetime, operator

dir = "/"
folders = [(f,os.path.getmtime('%s/%s'%(dir,f))) for f in os.listdir(dir) if os.path.isdir(f)]
(newest_folder, mtime) = sorted(folders, key=operator.itemgetter(1), reverse=True)[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...