Найти - Пользователи
Полная версия: Копирование файлов по маске
Начало » Python для новичков » Копирование файлов по маске
1
Patrik
Здравствуйте.

Есть список файлов:
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())

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

Patrik
Решил задачу так
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())
скрипт работает, есть ли в нем какие упущения?
py.user.next
>>> 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'
>>>
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