Перейти к содержимому

Python как выбрать файл из папки

  • автор:

Файлы. Работа с файлами.

Python 3 логотип

В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.

Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:

У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
Режим Обозначение
‘r’ открытие на чтение (является значением по умолчанию).
‘w’ открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
‘x’ открытие на запись, если файла не существует, иначе исключение.
‘a’ открытие на дозапись, информация добавляется в конец файла.
‘b’ открытие в двоичном режиме.
‘t’ открытие в текстовом режиме (является значением по умолчанию).
‘+’ открытие на чтение и запись

Режимы могут быть объединены, то есть, к примеру, ‘rb’ — чтение в двоичном режиме. По умолчанию режим равен ‘rt’.

И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.

Чтение из файла

Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.

Первый — метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

Ещё один способ сделать это — прочитать файл построчно, воспользовавшись циклом for:

Запись в файл

Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

Откроем файл на запись:

 Запись в файл осуществляется с помощью метода write:
 

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:

 Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
   Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Сортируем файлы с помощью Python

Штош. Скорее всего, у многих в папке загрузок собиралась куча разных инсталляторов, архивов и прочих файлов. Намного проще найти нужное, когда папки отсортированы в едином стиле. Вот я и подумал, почему бы не написать скрипт сортировщика по расширениям файлов на Python?

Пишем код

Для начала импортируем стандартный модуль os для работы с операционной системой. С помощью этого модуля мы будем создавать папки и перемещать файлы.

import os

Создадим переменную для пути папки или диска, в которой мы будем сортировать файлы. В моих любимых окошечках путь к файлу записывается через backslash, который в Python является специальным символом экранирования. Поэтому мы либо пишем 2 бэкслэша, либо добавляем перед строкой букву r, тем самым подавляя экранирование.

main_path = 'd:\\down' # main_path = r'd:\down

Чтобы создать папку, используем метод os.mkdir()

os.mkdir(main_path + '\\aboba')

Создаем много папок

Напишем функцию для создания папок из списка названий. Для каждого названия проверяем существование папки с помощью метода os.path.exists().

# also creates folders from dictionary keys def create_folders_from_list(folder_path, folder_names): for folder in folder_names: if not os.path.exists(f'\\'): os.mkdir(f'\\')

Теперь давайте создадим словарь extensions. Ключи - названия папок. Значения - расширения файлов для каждой отдельной папки.

# key names will be folder names! extensions =

Передаем в функцию create_folders_from_list() новоиспеченный словарь. Папки создадутся из названий ключей.

Получаем пути подпапок и файлов

Пишем функцию для получения путей подпапок. Для каждого объекта в методе os.scandir() проверяем, является ли он каталогом.

def get_subfolder_paths(folder_path) -> list: subfolder_paths = [f.path for f in os.scandir(folder_path) if f.is_dir()] return subfolder_paths

Можно создать функцию получения имен подпапок, которая нам не пригодится дальше. Почему бы и нет? На самом деле, как сниппет для дальнейших проектов она может быть полезна.

Нам нужно взять пути подпапок, разделить по бэкслэшам строку и взять последний элемент.

def get_subfolder_names(folder_path) -> list: subfolder_paths = get_subfolder_paths(folder_path) subfolder_names = [f.split('\\')[-1] for f in subfolder_paths] return subfolder_names

Теперь получим пути всех файлов в папке, скопируем функцию get_subfolder_paths() и добавим в условие генератора not.

def get_file_paths(folder_path) -> list: file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()] return file_paths

Для полного счастья не хватает только функции получения имен файлов.

def get_file_names(folder_path) -> list: file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()] file_names = [f.split('\\')[-1] for f in file_paths] return file_names

Сортируем файлы

Приступаем к функции сортировки. Получаем пути файлов в переменную file_paths. Создаем переменную ext_list со списком метода словаря extensions.items(). Обращение к списку по индексу возвращает нам пару ключ-значение в виде списка, первый элемент которого - это ключ или название папки в нашем проекте, а второй элемент - это значение, то есть расширения файлов для этой папки.

def sort_files(folder_path): file_paths = get_file_paths(folder_path) ext_list = list(extensions.items())

Теперь создадим цикл для каждого пути файла в списке. Вытащим отдельно расширение и имя файла.

for file_path in file_paths: extension = file_path.split('.')[-1] file_name = file_path.split('\\')[-1]

Создадим еще один цикл внутри. Для каждого ключа в словаре мы проверяем, есть ли расширение файла в списке расширений. Если есть, то перемещаем файл.

for dict_key_int in range(len(ext_list)): if extension in ext_list[dict_key_int][1]: print(f'Moving in folder\n') os.rename(file_path, f'\\\\')

Сделать это можно при помощи изменения пути файла методом os.rename("Путь файла сейчас", "Будущий путь файла")

Готовая функция сортировки файлов:
def sort_files(folder_path): file_paths = get_file_paths(folder_path) ext_list = list(extensions.items()) for file_path in file_paths: extension = file_path.split('.')[-1] file_name = file_path.split('\\')[-1] for dict_key_int in range(len(ext_list)): if extension in ext_list[dict_key_int][1]: print(f'Moving in folder\n') os.rename(file_path, f'\\\\')

Удаляем пустые папки

Остался последний штрих - удаление пустых папок. Все просто. Создаем функцию. Получаем пути подпапок. Проверяем, какой список возвращает метод os.listdir("folder_path") для каждой подпапки. Если возвращается пустой список, значит удаляем папку с помощью os.rmdir("folder_path")

def remove_empty_folders(folder_path): subfolder_paths = get_subfolder_paths(folder_path) for p in subfolder_paths: if not os.listdir(p): print('Deleting empty folder:', p.split('\\')[-1], '\n') os.rmdir(p)

Полный код программы

import os main_path = 'd:\\down' # key names will be folder names! extensions = < 'video': ['mp4', 'mov', 'avi', 'mkv', 'wmv', '3gp', '3g2', 'mpg', 'mpeg', 'm4v', 'h264', 'flv', 'rm', 'swf', 'vob'], 'data': ['sql', 'sqlite', 'sqlite3', 'csv', 'dat', 'db', 'log', 'mdb', 'sav', 'tar', 'xml'], 'audio': ['mp3', 'wav', 'ogg', 'flac', 'aif', 'mid', 'midi', 'mpa', 'wma', 'wpl', 'cda'], 'image': ['jpg', 'png', 'bmp', 'ai', 'psd', 'ico', 'jpeg', 'ps', 'svg', 'tif', 'tiff'], 'archive': ['zip', 'rar', '7z', 'z', 'gz', 'rpm', 'arj', 'pkg', 'deb'], 'text': ['pdf', 'txt', 'doc', 'docx', 'rtf', 'tex', 'wpd', 'odt'], '3d': ['stl', 'obj', 'fbx', 'dae', '3ds', 'iges', 'step'], 'presentation': ['pptx', 'ppt', 'pps', 'key', 'odp'], 'spreadsheet': ['xlsx', 'xls', 'xlsm', 'ods'], 'font': ['otf', 'ttf', 'fon', 'fnt'], 'gif': ['gif'], 'exe': ['exe'], 'bat': ['bat'], 'apk': ['apk'] ># also creates folders from dictionary keys def create_folders_from_list(folder_path, folder_names): for folder in folder_names: if not os.path.exists(f'\\'): os.mkdir(f'\\') def get_subfolder_paths(folder_path) -> list: subfolder_paths = [f.path for f in os.scandir(folder_path) if f.is_dir()] return subfolder_paths def get_file_paths(folder_path) -> list: file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()] return file_paths def sort_files(folder_path): file_paths = get_file_paths(folder_path) ext_list = list(extensions.items()) for file_path in file_paths: extension = file_path.split('.')[-1] file_name = file_path.split('\\')[-1] for dict_key_int in range(len(ext_list)): if extension in ext_list[dict_key_int][1]: print(f'Moving in folder\n') os.rename(file_path, f'\\\\') def remove_empty_folders(folder_path): subfolder_paths = get_subfolder_paths(folder_path) for p in subfolder_paths: if not os.listdir(p): print('Deleting empty folder:', p.split('\\')[-1], '\n') os.rmdir(p) if __name__ == "__main__": create_folders_from_list(main_path, extensions) sort_files(main_path) remove_empty_folders(main_path)

Настройка программы под свои нужды

Как вы уже могли понять, программа довольно гибкая, и вы можете настроить ее под себя. Для этого нужно всего-лишь изменить словарь extensions.

Приведу пример. Для каждого видео на свой YouTube канал я создаю каталог, в котором есть папки для футажей, картинок, звука, mkv файлов для последующего конвертирования в mp4 (premiere не любит mkv) и самого проекта.

Вот такой словарь.

main_folder = 'f:\\shtosh python\\new video' # key names will be folder names! extensions =

С помощью такого подхода я могу накидать любые файлы для монтажа в одну папку, затем запустить скрипт и легко импортировать все это дело в premiere pro.

Заключение

Штош. Код лежит на GitHub. Берите, изменяйте под себя, пользуйтесь на здоровье. Буду рад любому фидбеку.

UPD. Доработал программу, учитывая (не все) замечания в комментариях. Статью не переписывал, мне лень.

Выбор последнего по дате файла из каталога

Изучаю Python, пытаюсь написать скрипт, который из определенной папки берет файл, который создался поздней других. Как это сделать?

Отслеживать
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 22 дек 2015 в 6:17
71 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
Если вам дан исчерпывающий ответ, отметьте его как верный (галка напротив выбранного ответа).
23 дек 2015 в 3:47

6 ответов 6

Сортировка: Сброс на вариант по умолчанию

Пусть задан какой-то путь:

path = r'C:\Python27' 

Нужно получить список файлов по этому пути:

import os files = os.listdir(path) 

На этом этапе желательно проверить, что список файлов не пустой. Делаем просто if files: , а все что расписано ниже - идет внутри блока if.

Превратим просто список файлов в список файлов с путями:

files = [os.path.join(path, file) for file in files] 

Функция os.path.join() "прикрепляет" путь к имени файла. В зависимости от системы данная функция вставляет между путем и файлом либо прямой слеш, либо обратный, либо вообще ничего, если слеш уже есть в конце пути.

Оставляем в списке только файлы:

files = [file for file in files if os.path.isfile(file)] 

Время создания файла будем определять функцией os.path.getctime() . Нужно найти файл, у которого дата модификации максимальна. Для этого воспользуемся функцией max с дополнительным параметром key , позволяющим задать функцию, которая будет применяться к каждому объекту из списка, минимальное будет определяться по соответствующим возвращаемым значениям:

>>> max(files, key=os.path.getctime) 'C:\\Python27\\LICENSE.txt' 

В других ответах вижу sort либо sorted . Почему не применить его? Все просто: зачем сортировать список (возможно, большой), когда нужно всего лишь один раз пройти по нему и найти максимальное.

Отслеживать
ответ дан 22 дек 2015 в 7:00
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков

os.listdir возвращает имена не только файлов, но также и каталогов. А в вопросе фигурирует именно файл.

– user194374
22 дек 2015 в 7:08
@kff, изменил ответ.
22 дек 2015 в 7:18

на Windows, лучше os.path.getctime использовать, чтобы найти файл, который был создан самым последним, а не изменён самым последним. Если использовать os.scandir() , то можно вообще с O(1) (константа) памятью найти файл за O(n) (линейное) время, используя max()

22 дек 2015 в 17:08

@jfs, на практике редко требуется сравнивать дату именно создания файла (хотя, могут быть и такие случаи), поэтому задание понял не так как в нем написано)

22 дек 2015 в 17:14

@insolor: вопрос явно говорит: "файл, который создался поздней других", а не файл, который был модифицировано поздней других.

26 июл 2016 в 13:33

import os path = '/path/to/you/dir' # Путь к вашей папке # Получим список имен всего содержимого папки # и превратим их в абсолютные пути dir_list = [os.path.join(path, x) for x in os.listdir(path)] if dir_list: # Создадим список из путей к файлам и дат их создания. date_list = [[x, os.path.getctime(x)] for x in dir_list] # Отсортируем список по дате создания в обратном порядке sort_date_list = sorted(date_list, key=lambda x: x[1], reverse=True) # Выведем первый элемент списка. Он и будет самым последним по дате print sort_date_list[0][0] 

Отслеживать
ответ дан 22 дек 2015 в 6:47
4,676 16 16 серебряных знаков 15 15 бронзовых знаков

os.listdir возвращает имена не только файлов, но также и каталогов. А в вопросе фигурирует именно файл.

– user194374
22 дек 2015 в 7:07
Решил не делать лишних проверок чтоб не загромождать код.
22 дек 2015 в 7:13

на Unix, getctime() не возвращает время создания, возможно лучше getmtime() использовать (время последнего изменения), чтобы код одинаково между платформами работал. Нет необходимости sorted() использовать, можно max() вместо в этом случае использовать.

22 дек 2015 в 17:12

..скрипт, который из определенной папки берет файл, который создался поздней других.

#!/usr/bin/env python3 import os import sys folder = sys.argv[1] if len(sys.argv) > 1 else os.curdir entry = max((e for e in os.scandir(folder) if e.is_file(follow_symlinks=False)), key=lambda e: getattr(e.stat(), 'st_birthtime', None) or e.stat().st_ctime) print(entry.path) 

Смысл st_ctime зависит от системы:

  • на Windows — это время создания файла
  • на POSIX — это время последнего изменения мета-данных у файла (что может отличаться от даты создания файла)

st_birthtime это время создания файла на некоторых системах таких как FreeBSD.

На Linux некоторые файловые системы такие как ext4 также сохраняют crtime (не путайте с ctime ) -- поэтому, если обязательно нужна именно дата создания, то можно что-то вроде xstat bash функции использовать (она реализована поверх debugfs и stat -- сама по себе stat команда не возвращает Birth time на моей системе).

Чтобы найти файл, который был изменён последним, нужно использовать st_mtime атрибут.

Если сохранить вышеприведённый Питон код в файл last_created.py и положить этот файл куда-нибудь в PYTHONPATH ( sys.path ), то чтобы узнать какой файл был создан последним в папке "здесь путь к папке" , можно выполнить команду:

C:\> py -m last_created "здесь путь к папке" 
C:\> last_created "здесь путь к папке" 

Если необходимо следить за вновь созданными файлами в папке в реальном времени, то чтобы избежать постоянного перебора всех файлов в папке, можно использовать watchdog библиотеку, которая позволяет эффективно следить за изменениями в файловой системе (выполнять действия в ответ на события) и поддерживает разные платформы. Чтобы установить:

С:\> py -m pip install watchdog 

Чтобы выводить на экран любые изменения в заданном дереве директорий:

$ watchmedo log "здесь путь к папке" 

Вот версия last_created.py , которая поддерживает старые версии Питона (Python 2/3):

#!/usr/bin/env python """Find the last created file in a given directory.""" import os import sys import stat folder = sys.argv[1] if len(sys.argv) > 1 else os.curdir files = (os.path.join(folder, name) for name in os.listdir(folder)) entries = ((path, os.lstat(path)) for path in files) # don't follow symlinks path, _ = max((e for e in entries if stat.S_ISREG(e[1].st_mode)), # find regular files key=lambda e: getattr(e[1], 'st_birthtime', None) or e[1].st_ctime) print(path) 

На Питоне 2 на Винде, чтобы не иметь проблем с Юникодными именами, следует использовать Unicode Win32 API: GetCommandLineW() , CommandLineToArgvW() (Python 3 делает это автоматически). См. Read Unicode characters from command-line arguments in Python 2.x on Windows. С этим изменением код работает даже, если имена не могут быть представлены в кодировке, используемой в текущей локали (PEP 383) на всех платформах (Python 2/3, Windows/POSIX).

Поведение данного кода при возникновении ошибок (файл исчез или нет прав доступа к файлу) отличается от первого примера, где e.is_file() игнорирует FileNotFoundError .

os.path.isfile() функция, используемая в других ответах, возвращает False при возникновении любых OSError ошибок (если хочется этого поведения, то можно явно обернуть os.lstat() , e.is_file() вызовы в try/except блоки).

Дополнительно, в отличии примеров кода в этом ответе, os.path.isfile() , os.path.getctime() следуют по цепочке symlinks , если необходима информация по самой записи в каталоге, то можно os.path.islink() и os.lstat() вызывать.

Версия, использующая os.scandir() может быть быстрее версии с os.listdir() . Также os.scandir() может работать для очень больших директорий не загружая все записи в память сразу как это делает os.listdir() .

Работа с путями к файлам и папкам

Модуль os содержит подмодуль os.path , который позволяет работать с путями файлов и папок. Импортировать этот модуль отдельно не нужно, достаточно выполнить import os .

Присоединение одной части пути к другой

Работа с путями к файлам и папкам как с простыми строками чревата множеством ошибок и может создать проблемы при переносе программы между различными операционными системами. Правильный путь объединить две части пути — это использование os.path.join :

>>> import os >>> dirpath = '../books' >>> # Здесь filename - имя файла, а не путь от места запуска программы до него: >>> for filename in os.listdir(dirpath): . # filepath = dirname + filename - сработает неправильно, так как будет не хватать "/" . filepath = os.path.join(dirname, filename) # поставит "/" или "\" за нас . with open(filepath, encoding='utf-8') as fd: . if 'нагваль' in fd.read(): . print('Книга ' + filename + ' об индейцах') 

Извлечение имени файла из пути

Функция os.path.split совершает обратное действие — отрезает имя файла или ниже лежащей папки от пути:

>>> import os >>> path = './work/project/version8/final.txt' >>> dirpath, filename = os.path.split(path) >>> print(dirpath) ./work/project/version8 >>> print(filename) final.txt >>> project_dir, version_dir = os.path.split(dirpath) >>> print(project_dir) ./work/project >>> print(version_dir) version8 

Извлечение расширения

Кроме того, может пригодиться функция os.path.splitext , котоая отрезает расширение файла:

>>> import os >>> path = './work/project/version12/final.txt' >>> base, ext = os.path.splitext(path) >>> print(base, ext, sep='\n') ./work/project/version12/final .txt 

Проверка типа файла

Кроме прочего, модуль os.path содержит функции для проверки существования файла и для определения его типа:

>>> import os >>> path = './kursach/text' >>> if os.path.exists(path): . print(path, 'существует') . if os.path.isfile(path): . print(path, '— это файл') . elif os.path.isdir(path): . print(path, '— это папка') . else: . print(path, '— это ни файл и ни папка') . else: . print(path, 'не существует') 

Манипуляции с файлами и папками

Производите все манипуляции с файлами с осторожностью, придерживайтесь правила «семь раз отмерь — один раз отрежь». Не забывайте программно производить все возможные проверки перед выполнением операций.

Создание файла

Нет ничего проще, чем создать пустой файл, достаточно открыть несуществующий файл с флагом 'x' :

>>> with open('empty.txt', 'x'): . pass 

Конечно, можно было бы использовать флаг 'w' , но тогда уже существующий файл был бы стёрт. С флагом 'x' open либо создаст новый файл, либо выбросит ошибку.

Создание папки

Для создания новой папки используйте os.mkdir(name) . Эта функция выбросит ошибку, если по указанному пути уже существует файл или папка. Если вам нужно создать сразу несколько вложенных папок, то смотрите функцию os.makedirs(name, exist_ok=False) .

Перемещение и переименование

Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil . Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу. В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.

>>> import shutil >>> source = 'my_poem.txt' >>> destination = 'trash' >>> # Создаем папку назначения >>> os.mkdir(destination) >>> # Перенесем файл внутрь папки >>> path = shutil.move(source, destination) >>> print(path) trash/my_poem.txt >>> # Перенесем файл обратно >>> new_name = 'poem.txt' >>> final_path = shutil.move(path, new_name) >>> print(final_path) poem.txt 

Как же переименовать файл? Несмотря на то, что os содержит специальную функцию для переименования, нужно понимать, что в рамках одной файловой системы перемещение и переименование — это одно и то же. Когда вы переименовываете файл, его содержимое не переписывается на носителе в другое место, просто файловая система теперь обозначает его положение другим путём.

Копирование

Скопировать файл можно с помощью функции shutil.copy(source, destination) . Правила расположения копии будут те же, что и при использовании shutil.move , за тем исключением, что если destination существует и не является файлом, то он будет заменён и ошибки это не вызовет.

Скопировать папку для операционной системы сложнее, ведь мы всегда хотим скопировать не только папку, но и её содержимое. Для копирования папок используйте shutil.copytree(source, destination) . Обратите внимание, что для этой функции destination всегда должно быть путём конечного расположения файлов и не может быть уже существующей папкой.

Удаление

Удалить файл можно с помощью функции os.remove , а пустую папку с помощью функции os.rmdir .

А вот для удаления папки с содержимым вновь понадобится shutil . Для удаления такой папки используйте shutil.rmtree .

Будьте осторожны, команды удаления стирают файл, а не перемещают его в корзину, вне зависимости от операционной системы! После такого удаления восстановить файл может быть сложно или вовсе невозможно.

Домашняя работа

  1. В текущей папке лежат файлы с расширениями .mp3 , .flac и .oga . Создайте папки mp3 , flac , oga и положите туда все файлы с соответствующими расширениями.
  2. В текущей папке лежит две других папки: vasya и mila , причём в этих папках могут лежать файлы с одинаковыми именами, например vasya/kursovaya.doc и mila/kursovaya.doc . Скопируйте все файлы из этих папок в текущую папку назвав их следующим образом: vasya_kursovaya.doc , mila_test.pdf и т.п.
  3. В текущей папке лежат файлы следующего вида: S01E01.mkv , S01E02.mkv , S02E01.mkv и т.п., то есть все файлы начинаются с S01 или S02 . Создайте папки S01 и S02 и переложите туда соответствующие файлы.
  4. В текущей папке лежат файлы вида 2019-03-08.jpg , 2019-04-01.jpg и т.п. Отсортируйте файлы по имени и переименуйте их в 1.jpg , 2.jpg , …, 10.jpg , и т.д.
  5. В текущей папке лежат две другие папки: video и sub . Создайте новую папку watch_me и переложите туда содержимое указанных папок (сами папки класть не надо).
  6. В текущей папке лежат файлы типа Nina_Stoletova.jpg , Misha_Perelman.jpg и т.п. Переименуйте их переставив имя и фамилию местами.
  7. В текущей папке лежит файл list.tsv , в котором с новой строки написаны имена некоторых других файлов этой папки. Создайте папку list и переложите в неё данные файлы.

Для тестирования вашей программы положите в репозиторий файлы и папки с соответствующими именами. Файлы должны быть пустыми, если не указано обратного.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *