Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 29, 2011 15:09:50

uhazhor
От:
Зарегистрирован: 2011-11-29
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

Вообщем имеется такой скрипт для сортировки имен файлов по дате изменения содержимого файлов

Код:

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… и т.д.

ЗЫ Кол-во найденных файлов заранее не может быть известным.



Офлайн

#2 Ноя. 29, 2011 16:41:55

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

date_file_list.sort()
Вот после этого момента у вас в date_file_list будут находится кортежи (дата_изменения, имя_и_путь) - берите оттуда и пользуйте в чем вопрос-то?

Офлайн

#3 Ноя. 29, 2011 18:48:41

uhazhor
От:
Зарегистрирован: 2011-11-29
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

s0rg
date_file_list.sort()
Вот после этого момента у вас в date_file_list будут находится кортежи (дата_изменения, имя_и_путь) - берите оттуда и пользуйте в чем вопрос-то?
Проблема в том, как поочередно из date_file_list.sort() получать наименование каждого найденного файла, начиная с первого по списку, и помещать в переменную для дальнейшего использования?



Офлайн

#4 Ноя. 29, 2011 19:08:05

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

for dt, fname in date_file_list:
print fname

Отредактировано (Ноя. 29, 2011 19:08:46)

Офлайн

#5 Ноя. 30, 2011 07:28:14

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

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)



Офлайн

#6 Ноя. 30, 2011 08:51:47

uhazhor
От:
Зарегистрирован: 2011-11-29
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

Как в результате копирования добиться следующего:
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)

Офлайн

#7 Дек. 1, 2011 02:34:00

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Как создать цикл для операций над поулченным списком значений

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)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version