Найти - Пользователи
Полная версия: Как из общего списка файлов сделать другой список файлов,за период t
Начало » Python для новичков » Как из общего списка файлов сделать другой список файлов,за период t
1 2
Семён
Возможно сама функция мне не выдаст список,но вот такое сочетание?
————–
d=os.listdir(pth)
drs=get_dir_names(pth)
for i in d:
if i in files:
files.append(i)
else:
drs.append(i)
———————-
даст мне два списка
files-файды
drs-директории


Я вроде почитал справку по предложенным вами функции dirname, isdir, join, relpath, makedirs и move из shutil, но всё же не могу понять как всё же реализовать,используя лишь только этот функционал((просто это мой первый опыт с питоном,и я заранее извиняюсь за глупые порой вопросы,но вот пока не понятно мне как реализовать…я конечно читаю мануалы,форумы,видеоуроки смотрю…но конкретно по моей цели пока особо не могу понять(
Семён
вот в краткости я понял сл:
функции:
1)os.path.realpath(path)-если мы в агрумент path укажим ссылку на какой-то файл,то она вообщем возвращает путь того файла,на который указывает ссылка,а не путь где сама ссылка расположена
2)os.path.join(path1, path2, …)-Объединяет пути path1 и path2 и т.д.
например:
os.path.join(‘c:\\’, ‘system\\apps\\Python\\’, ‘Python.app’)
возвратит нам:
‘c:\\system\\apps\\Python\\Python.app’
3)os.path.isdir(path)-Возвращает 1, если path указывает на папку
4)os.makedirs(path)-Работает аналогично функции mkdir(), но автоматически создает все необходимые промежуточные папки, т.е. не нужно специально создавать промежуточные файлы перед перемещением-достаточно просто создать весь путь куда переместить
5)dirname(path)-Возвращает имя каталога пути path.
например:
>>> os.path.dirname(‘c:\\system\\apps\\Python\\Python.app’)
‘c:\\system\\apps\\Python’
6)shutil.move(src, dst)
src-файл
dst-куда переместить файл

Примерно,правильно ли я составил скрипт:
——————–
import os, sys
import shutil
import time as _time
from datetime import datetime

ticks = lambda x: int(_time.mktime(x.timetuple()))

# генератор имен всех файлов в директории
def file_list(root):
join = os.path.join
islink = os.path.islink

for path, dirs, files in os.walk(os.path.abspath(root)):
for filename in files:
filename = join(path, filename)
if not islink(filename):
yield filename

# генератор имен файлов, соответствующих Вашим условиям
def file_filter(files, start, stop):
for fname in files:
stat = os.stat(fname)
if start <= stat.st_mtime <= stop:
yield fname, stat.st_size

def main(root, start, stop):
move_count = 0
for fname, size in file_filter(file_list(root), start, stop):
if not size:
f=os.path.realpath(fname)
dannie=f.read(10)
print dannie
dir=dirname(f)
os.makedirs(/arhiv/'+dir)
shutil.move(fname, /arhiv/'+dir)
move_count += 1

print(“Всего перенесено {}”.format(move_count))

if “__main__” == __name__:
# тут конечно же нужно сделать проверку на количество и качество
# переданных параметров, для этого есть модуль argparse - осваивайте
root = sys.argv
start = ticks(datetime.strptime(sys.argv, “%d.%m.%Y”))
stop = ticks(datetime.strptime(sys.argv, “%d.%m.%Y”))

main(root, start, stop)
——————————–
тогда как в примере:
если логи log1.ftr, log56.ftf,og33.trs были изменены между промежутком времени sys.argv и sys.argv, то
1)лог /temp/logi/PVM45/15012012/log1.ftr переместится в /arhiv/PVM1/13022011/log1.ftr
2)лог /temp/PVM45/15012012/log56.ftf переместится в /arhiv/PVM45/15012012/log56.ftf
3)лог /temp/PVM1/13022011/log33.trs переместится в /arhiv/PVM1/13022011/log33.trs

верно?
FishHook
Уважаемый Семён! Человек, которому надо десять раз повторить элементарные правила поведения на форуме не заслуживает того, чтобы на него тратили время.

>>>Прочтите наконец объявление в заголовке этой страницы - Ваши посты абсолютно не читабельны
Семён
Извините, не прочитал просто правила оформления постов(я так полагаю понятие читабельности-это оформление самого поста-код отдельно в тэгах,сообщения отдельно):
Видоизменю свой последний пост:
—————–
вот в краткости я понял сл:
функции:
1)os.path.realpath(path)-если мы в агрумент path укажим ссылку на какой-то файл,то она вообщем возвращает путь того файла,на который указывает ссылка,а не путь где сама ссылка расположена
2)os.path.join(path1, path2, …)-Объединяет пути path1 и path2 и т.д.
например:
os.path.join(‘c:\\’, ‘system\\apps\\Python\\’, ‘Python.app’)
возвратит нам:
‘c:\\system\\apps\\Python\\Python.app’
3)os.path.isdir(path)-Возвращает 1, если path указывает на папку
4)os.makedirs(path)-Работает аналогично функции mkdir(), но автоматически создает все необходимые промежуточные папки, т.е. не нужно специально создавать промежуточные файлы перед перемещением-достаточно просто создать весь путь куда переместить
5)dirname(path)-Возвращает имя каталога пути path.
например:
>>> os.path.dirname(‘c:\\system\\apps\\Python\\Python.app’)
‘c:\\system\\apps\\Python’
6)shutil.move(src, dst)
src-файл
dst-куда переместить файл

Примерно,правильно ли я составил скрипт:
import os, sys
import shutil
import time as _time
from datetime import datetime

ticks = lambda x: int(_time.mktime(x.timetuple()))
Примерно,правильно ли я составил скрипт:
import os, sys
import shutil
import time as _time
from datetime import datetime

ticks = lambda x: int(_time.mktime(x.timetuple()))

# генератор имен всех файлов в директории
def file_list(root):
join = os.path.join
islink = os.path.islink

for path, dirs, files in os.walk(os.path.abspath(root)):
for filename in files:
filename = join(path, filename)
if not islink(filename):
yield filename

# генератор имен файлов, соответствующих Вашим условиям
def file_filter(files, start, stop):
for fname in files:
stat = os.stat(fname)
if start <= stat.st_mtime <= stop:
yield fname, stat.st_size

def main(root, start, stop):
move_count = 0
for fname, size in file_filter(file_list(root), start, stop):
if not size:
f=os.path.realpath(fname)
dannie=f.read(10)
print dannie
dir=dirname(f)
os.makedirs(/arhiv/'+dir)
shutil.move(fname, /arhiv/'+dir)
move_count += 1

print("Всего перенесено {}".format(move_count))

if "__main__" == __name__:
# тут конечно же нужно сделать проверку на количество и качество
# переданных параметров, для этого есть модуль argparse - осваивайте
root = sys.argv[1]
start = ticks(datetime.strptime(sys.argv[2], "%d.%m.%Y"))
stop = ticks(datetime.strptime(sys.argv[3], "%d.%m.%Y"))

main(root, start, stop)
тогда как в примере:
если логи log1.ftr, log56.ftf,og33.trs были изменены между промежутком времени sys.argv и sys.argv, то
1)лог /temp/logi/PVM45/15012012/log1.ftr переместится в /arhiv/PVM1/13022011/log1.ftr
2)лог /temp/PVM45/15012012/log56.ftf переместится в /arhiv/PVM45/15012012/log56.ftf
3)лог /temp/PVM1/13022011/log33.trs переместится в /arhiv/PVM1/13022011/log33.trs

верно составил?
pyuser
Нет не верно :(
конструкция
if not size:
означает проверку равенства размера файла нулю, т.е. файлы, обрабатываемые в этом блоке, пустые и читать из них 10 байт не имеет смысла.

Вы несколько не внимательны, я указал Вам на функцию relpath (относительный путь), a не realpath

как-то так
def main(source, destination, start, stop):
move_count = 0
for fname, size in file_filter(file_list(source), start, stop):
if size:
with open(fname, "rb") as f:
print(f.read(10))

path = os.path.relpath(fname, source)
dst_path = os.path.join(destination, path)
dst_dir = os.path.dirname(dst_path)
if not os.path.isdir(dst_dir):
os.makedirs(dst_dir)
shutil.move(fname, dst_path)
move_count += 1
Семён
pyuser, благодарю за помощь!Всё работает,я только добавил ещё пару условий своих и всё отл работает!)))
На конкретных примерах быстрее осознание процесса происходит)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB