Форум сайта python.su
Вообщем имеется такой скрипт для сортировки имен файлов по дате изменения содержимого файлов
Код:
import os, glob, time
root = ‘/home/usertst/patch’ # one specific folder
print ‘-’*60 # just vanity
date_file_list =
for folder in glob.glob(root):
print “folder =”, folder
for file in glob.glob(folder + ‘/*.jar’):
stats = os.stat(file)
lastmod_date = time.localtime(stats)
date_file_tuple = lastmod_date, file
date_file_list.append(date_file_tuple)
date_file_list.sort()
print “%-40s %s” % (“filename:”, “last modified:”)
for file in date_file_list:
folder, file_name = os.path.split(file)
file_date = time.strftime(“%m/%d/%y %H:%M:%S”, file)
print “%-40s %s” % (file_name, file_date)
print ‘-’*60 # just vanity
Результат
Код:
————————————————————
folder = /home/usertst/patch
filename: last modified:
patch5.jar 01/17/11 11:56:42
patch1.jar 04/19/11 01:29:06
patch2.jar 04/19/11 01:47:52
patch3.jar 04/19/11 01:49:44
patch4.jar 11/25/11 14:48:32
————————————————————
Каким образом можно сделать цикл, чтобы для каждого файла из полученного отсортированного списка начиная с первого наименования файла производились бы операции?
Т.е. берем первое полученное наименование файла “patch5.jar” - передаем значение “patch5.jar” в некоторую переменную, благодаря которой копируем файл patch5.jar из ‘/home/usertst/patch’ в ‘/home/usertst/store’, и удаляем файл patch5.jar из ‘/home/usertst/patch’. Затем производятся теже самые операции со след файлом - patch1.jar… и т.д.
ЗЫ Кол-во найденных файлов заранее не может быть известным.
Офлайн
date_file_list.sort()
Офлайн
s0rgПроблема в том, как поочередно из date_file_list.sort() получать наименование каждого найденного файла, начиная с первого по списку, и помещать в переменную для дальнейшего использования?Вот после этого момента у вас в date_file_list будут находится кортежи (дата_изменения, имя_и_путь) - берите оттуда и пользуйте в чем вопрос-то?date_file_list.sort()
Офлайн
for dt, fname in date_file_list:
print fname
Отредактировано (Ноя. 29, 2011 19:08:46)
Офлайн
uhazhorна этот вопрос Вам уже ответили. но судя по Вашей фразе:
Каким образом можно сделать цикл, чтобы для каждого файла из полученного отсортированного списка начиная с первого наименования файла производились бы операции?
uhazhorВы хотите паралельно с поиском выполнять некие действия над файлами и в конце операции вывести список имен, отсортированный по дате, если это так, то попробуйте следующий код:
Кол-во найденных файлов заранее не может быть известным.
import os
import fnmatch
from datetime import datetime
from operator import itemgetter
from shutil impor move
################################################################################
def fileslist(pattern="*.*", src=os.curdir, dst=None):
getmtime = os.path.getmtime
join = os.path.join
relpath = os.path.relpath
_filter = fnmatch.filter
fts = datetime.fromtimestamp
if dst:
for path, dirs, files in os.walk(os.path.abspath(src)):
for filename in _filter(files, pattern):
srcname = join(path, filename)
yield srcname, fts(getmtime(srcname))
dstname = join(dst, relpath(srcname, src))
move(srcname, dstname)
if "__main__" == __name__:
for fname, lastdate in sorted(
fileslist("*jar", src="/home/usertst/patch", dst="/home/usertst/store"),
key=itemgetter(1)):
print(fname, lastdate)
Офлайн
Как в результате копирования добиться следующего:
shutil.copy('/home/usertst/patch/file_name','/home/usertst/store/<'file_name'+'_'+'current day'+'_'+'current time'+'.jar')
т.е. копируется /home/usertst/patch/patch5.jar в /home/usertst/store/patch5.jar_111130_115559.jar
Отредактировано (Ноя. 30, 2011 14:10:52)
Офлайн
uhazhorприменительно к моему коду
Как в результате копирования добиться следующего:
shutil.copy('/home/usertst/patch/file_name','/home/usertst/store/<'file_name'+'_'+'current day'+'_'+'current time'+'.jar')
# перед циклом for path, dirs, files in os.walk(os.path.abspath(src)): добавьте строку:
now = datetime.now().strftime("%y%m%d_%H%M%S")
# после строки dstname = join(dst, relpath(srcname, src)) добатьте следущее:
name, ext = os.path.splitext(dstname)
dstname = "{}_{}{}".format(name, now, ext)
Офлайн