Подтвердить что ты не робот

Найти новую папку в каталоге на Python

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

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

import datetime, os, shutil 

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

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

directory = 'some/path/to/the/main/dir'
max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime)

Ответ 3

Один вкладыш для поиска последних

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

Один вкладыш, чтобы найти n-й последний

# Find n'th latest
import os; import glob
sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-n]

Ответ 4

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

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)

Ответ 5

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]