Найти новую папку в каталоге на 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*')
Я не уверен, как это сделать, чтобы проверить последнюю метку времени. Любые идеи?
Спасибо
Ответы
Ответ 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]