Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2013 19:18:01

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование файлов по маске

Здравствуйте.

Есть список файлов:
tn120011.txt
tn120013.txt
tn120015.txt
tn120017.txt

Из него нужно скопировать файл с наибольшим номером.

Все на что меня хватило:

import os shutil glob
files = glob.iglob(os.path.join(source_dir, "tn*.txt"))
for file in files:
        shutil.copy(file, getcwd())

Какой алгоритм решения этой задачи?



Офлайн

#2 Авг. 17, 2013 00:45:50

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование файлов по маске

Решил задачу так

import os, shutil, glob
source_dir = '/home/test/1/2/'
files = glob.glob(os.path.join(source_dir, "tn*.txt"))
listFile = []
for i in files:
    listFile.append(os.path.basename(i)[2:-4])
copyFile = 'tn'+max(listFile)+'.txt'
os.chdir('/home/test/1')
shutil.copy(os.path.join(source_dir, copyFile), os.getcwd())
скрипт работает, есть ли в нем какие упущения?



Офлайн

#3 Авг. 17, 2013 19:36:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Копирование файлов по маске

>>> lst = ['tn120011.txt', 'tn120017.txt', 'tn120013.txt', 'tn120015.txt']
>>> name = max(lst, key=lambda i: int(i[2:i.rindex('.')]))
>>> name
'tn120017.txt'
>>>

это точнее и медленнее
>>> import re
>>> 
>>> lst = ['tn120011.txt', 'tn120017.txt', 'tn120013.txt', 'tn120015.txt']
>>> 
>>> pat = re.compile(r'^tn(\d+)\.txt$')
>>> name = max(lst, key=lambda i: int(pat.search(i).group(1)))
>>> name
'tn120017.txt'
>>>



Отредактировано py.user.next (Авг. 17, 2013 19:43:30)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version