Как узнать размер файла python
Обновлено: 04.07.2024
Я пишу Python script в Windows. Я хочу сделать что-то на основе размера файла. Например, если размер больше 0, я пришлю электронное письмо кому-либо, в противном случае продолжаю другие вещи.
Как проверить размер файла?
Используйте os.stat и используйте элемент st_size результирующего объекта:
Вывод находится в байтах.
Во всяком случае, значение может быть передано в виде кратных размеру блока файловой системы (например, 4096 байт). К счастью, оно дается в байтах. @josch - да, это хорошо, для "размера на диске" вы можете умножить stat_result.st_blocks на размер блока, но я все еще ищу, как получить его программно и кроссплатформенно (не через tune2fs и т. д.)Вывод находится в байтах.
Примечание: реализация os.path.getsize просто return os.stat(filename).st_size Таким образом, существует ли незначительная потеря производительности при использовании os.path.getsize, а не os.stat (file) .st_size?150 нс в моем компьютере.
@wordsforthewise Так это как 2071611L байтов или 2071611L МБ? Что означает L? Пожалуйста скажите, что я новичок в Файла Сколько L 8MB? Google говорит, что 8e+6 я могу просто сравнить с 8e?Другие ответы работают на реальные файлы, но если вам нужно что-то, что работает для "файловых объектов", попробуйте следующее:
Он работает для реальных файлов и StringIO, в моем ограниченном тестировании. (Python 2.7.3.) API-интерфейс "file-like object", конечно, не является строгим интерфейсом, но API-документация предлагает что файловые объекты должны поддерживать seek() и tell() .
Edit
Другое отличие между этим и os.stat() заключается в том, что вы можете stat() файл, даже если у вас нет разрешения на его чтение. Очевидно, что подход seek/tell не будет работать, если у вас нет разрешения на чтение.
Изменить 2
В предположении Джонатона, здесь параноидальная версия. (Версия выше оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать из файла, вы получите нулевые байты!)
Эта статья — часть цикла «Python с абсолютного нуля», где мы рассказываем об азах Python в нашем фирменном нескучном стиле. Ты можешь читать их по порядку или выбирать какие‑то области, которые хотел бы подтянуть.
- Урок 1: Переменные, типы данных, условия и циклы
- Урок 2: Строки, файлы, исключения и работа с интернетом
Первые два урока доступны целиком без платной подписки. Этот — почти целиком: за исключением последнего примера и домашнего задания.
Работаем с файлами
Начнем, как всегда, с несложных вещей. В Python есть модуль с лаконичным названием os , который (ты не поверишь!) предназначен для взаимодействия программы с операционной системой, в том числе для управления файлами.
Первым делом, конечно, нужно импортировать его в начале нашего скрипта:
И теперь нам открываются разные интересные возможности. К примеру, мы можем получить путь к текущей папке. Сначала она совпадает с той, в которой ты был при запуске скрипта (даже если сам скрипт находится где‑то в другом месте), но по ходу исполнения программы мы можем менять это значение при помощи функции os. chdir( ) .
Если ты работаешь в Windows, то в пути к файлу или папке перед открывающей кавычкой указывай букву r (что означает raw) или вместо одной косой черты в пути ставь две.
Попробуем получить список файлов с расширением .py, находящихся в текущей директории. Для этого используем модули os и fnmatch.
Модуль fnmatch позволяет искать в строках определенный текст, подходящий по маске к заданному шаблону:
- * заменяет любое количество любых символов;
- ? заменяет один любой символ;
- [ seq] заменяет любые символы из последовательности в квадратных скобках;
- [! seq] заменяет любые символы, кроме тех, что присутствуют в квадратных скобках.
Давай безжалостно удалим какой‑нибудь файл:
А теперь создадим папку по указанному пути и сразу же удалим ее. Для этого пригодится модуль shutil, где есть функция rmtree( ) , которая удаляет папку вместе с содержимым.
Допустим, ты хочешь получить список всех файлов, содержащихся в папках по указанному пути (учитывая вложенные папки тоже), чтобы найти что‑то интересное. Скрипт будет выглядеть следующим образом:
warning
Будь осторожен — скрипт в таком виде обшарит весь диск D. Если он у тебя есть и там много хлама, то процесс может затянуться.
Функция walk() модуля os принимает один обязательный аргумент — имя каталога. Она последовательно проходит все вложенные каталоги и возвращает объект‑генератор, из которого получают:
- адрес очередного каталога в виде строки;
- список имен подкаталогов первого уровня вложенности для данного каталога;
- список имен файлов данного каталога.
Генератор — это объект, который сразу при создании не вычисляет значения всех своих элементов. Этим генераторы отличаются от списков — те хранят в памяти все свои элементы, и удалить их можно только программно. Вычисления с помощью генераторов называются ленивыми, они экономят память. Подробнее мы рассмотрим генераторы в следующих уроках.
Сейчас покажу, как узнать размер любого файла, а также дату его модификации.
print ( 'Дата последнего использования: ' , datetime . fromtimestamp ( atime ) ) print ( 'Дата последнего редактирования: ' , datetime . fromtimestamp ( mtime ) )Для операционных систем Unix 1 января 1970, 00:00:00 (UTC) — точка отсчета времени, или «начало эпохи». Чаще всего время в компьютере вычисляется в виде прошедших с этого момента секунд и лишь затем переводится в удобный для человека вид.
Давай пошутим над юзером: создадим какой‑нибудь файл и будем постоянно его открывать с помощью той программы, которой этот файл обычно открывается в системе:
f . write ( 'СРОЧНО НАЛЕЙТЕ ХАКЕРУ ПИВА, ИНАЧЕ ЭТО НЕ ЗАКОНЧИТСЯ!!' )Ниже приведен список еще некоторых полезных команд:
- os. path. basename( 'путь') — возвращает название файла или папки в конце пути;
- os. path. dirname( 'путь') — возвращает родительский путь к объекту пути;
- os. path. splitext( 'путь') — разделяет путь на путь и расширение файла;
- os. path. exists( 'путь') — существует ли путь до файла или папки;
- os. path. isfile( 'путь') — является ли объект пути файлом (существующим);
- os. path. isdir( 'путь') — является ли объект пути папкой (существующей).
Регулярные выражения
Регулярные выражения — это специальные шаблоны для поиска и замены строк в тексте. Вообще говоря, их вполне можно считать самостоятельным языком, и его изучение выходит за рамки этого цикла. Мы пройдемся по самым основам и по использованию регулярок в Python.
Подробнее о регэкспах ты можешь почитать в документации Python, в Википедии или в книге Джеффри Фридла, которая так и называется — «Регулярные выражения».
За работу с регулярными выражениями в Python отвечает модуль re. Первым делом импортируем его.
В качестве простейшего паттерна мы можем использовать какое‑нибудь слово. Пусть по традиции это будет «пиво»:
string = "Хакер знает, что пиво играет во взломе решающую роль. Свежее пиво — ключ к сисадмину. Пока сисадмин ходит писать, можно сесть за его комп и внедрить троян. "Команда re. search( pattern, string) ищет в тексте string первое вхождение шаблона pattern и возвращает группу строк, доступ к которым можно получить через метод . group( ) . Но команда search ищет только первое вхождение шаблона. Поэтому в нашем случае вернется всего один результат — слово «пиво», несмотря на то что в нашем тексте оно присутствует дважды.
Чтобы вернуть все вхождения шаблона в текст, используется команда re. findall( pattern, string) . Эта команда вернет список строк, которые присутствуют в тексте и совпадают с шаблоном.
string = "Хакер знает, что пиво играет во взломе решающую роль. Свежее пиво — ключ к сисадмину. Пока сисадмин ходит писать, можно сесть за его комп и внедрить троян. "Обрати внимание, что шаблоны в регулярных выражениях имеют буковку r перед началом строки. Это так называемые сырые строки, в которых не работает символ экранирования с помощью обратного слеша \ . При этом «сырая» строка не может заканчиваться этим символом.
В предыдущих двух примерах программ в качестве шаблона pattern для поиска строк ты использовал просто какое‑то слово. Но мощь регулярных выражений не в этом. Ты можешь заменять части шаблона специальными символами, чтобы под шаблон подходили не только конкретные слова, но и самые разные строки.
Давай, например, попробуем найти в тексте все слова, которые начинаются с «пи». Для этого используем специальный символ \ b — он означает «начало слова». Сразу после него указываем, с чего должно начинаться слово, и напишем специальный символ w , который означает, что дальше в шаблоне должны идти какие‑то буквы (плюс означает, что их может быть одна или больше) до тех пор, пока не встретится небуквенный символ (например, пробел или знак препинания). Шаблон будет выглядеть так: r"\ bпи\ w+" .
string = "Хакер знает, что пиво играет во взломе решающую роль. Свежее пиво — ключ к сисадмину. Пока сисадмин ходит писать, можно сесть за его комп и внедрить троян. "Давай попробуем выполнить чуть более сложную задачу. Найдем в тексте все email с доменом mail. ru , если они там есть.
string = "Если вы хотите связаться с админом, пишите на почту admin@mail. ru. По другим вопросам обращайтесь на support@mail. ru. "Как видишь, мы использовали тот же трюк, что и в прошлый раз, — написали специальный символ \ b , чтобы обозначить начало слова, потом \ w+ , что значит «одна или больше букв», а затем @mail. ru , заэкранировав точку, поскольку иначе она будет означать «любой символ».
Часто бывает нужно найти какой‑то элемент строки, окруженный двумя другими элементами. Например, это может быть URL. Чтобы выделить ту часть шаблона, которую нужно вернуть, используются скобки. Приведу пример, в котором ты получишь все адреса ссылок из какого‑то кусочка кода на HTML.
string = 'Вы можете посмотреть карту сайта < a href s">php"> тут</ a>. Посетите также < a href s">php"раздел</ a> 'В коде выше использовался паттерн r'href — в этом шаблоне искомая строка начинается с href code47">result . Точка и плюс внутри скобок указывают, что внутри кавычек могут быть любые символы (кроме символа новой строки). Знак вопроса означает, что нужно остановиться перед первой же встреченной кавычкой.
Знак вопроса в регулярных выражениях используется в двух немного разных смыслах. Если он идет после одного символа, это значит, что символ может присутствовать или не присутствовать в строке. Если же вопросительный знак идет после группы символов, это означает «нежадный» (non-greedy) режим: такая регулярка будет стараться захватить как можно меньше символов.
Мы можем не только искать строки, но и заменять их чем‑то другим. Например, давай попробуем удалить из HTML-кода все теги. Для этого используется команда re. sub( pattern, 'чем заменять', string) .
string = 'Вы можете посмотреть карту сайта < a href s">php"> тут</ a>. Посетите также < a href s">php"раздел</ a> 'Программа напечатает строку уже без тегов, так как мы заменили их пустой строкой.
Регулярные выражения — очень мощная штука. Освоив их, ты сможешь делать со строками почти все, что угодно, а в сочетании с кодом на Python — буквально что угодно. Для начала же можешь поэкспериментировать и изменить какие‑то из приведенных рецептов.
Функции
Пришла пора подробнее поговорить о функциях. Мы уже неоднократно вызывали разные функции — как встроенные в Python (например, print( ) ), так и из подключаемых модулей (например, urllib. request( ) ). Но что такое функция изнутри и как их делать самостоятельно?
Представь, что у тебя есть какой‑то набор команд, которые нужно выполнять несколько раз, изменяя лишь входные данные. Такие блоки команд обычно выносят в отдельные кусочки программы.
В объектно ориентированном программировании функции являются методами какого‑либо класса и пишутся через точку от его названия.
У функции могут быть входные параметры — это одна или несколько переменных, которые пишутся в скобках после имени функции. При вызове функции ты можешь передать ей аргументы для этих параметров. Некоторые из параметров могут быть необязательными или иметь значение по умолчанию — на случай, если его не передадут.
Объявление функции начинается с ключевого слова def , далее следует имя функции, параметры в скобках и программный код, отделенный четырьмя пробелами. Функция может возвращать одно или несколько значений с помощью ключевого слова return . Оно, кстати, прекращает работу функции, и, если за ним идут какие‑то команды, они будут пропущены.
Для примера разберем простейшую функцию, которая будет принимать в качестве аргументов два любых числа и перемножать их, возвращая результат умножения. Назовем ее umn.
Теперь, когда ты описал функцию, далее в этой же программе можно ее вызывать.
Иногда надо задать один из параметров как необязательный, установив для него значение по умолчанию.
Теперь если ты вызовешь функцию и не передашь ей второй аргумент, то она просто будет считать его равным десяти, то есть будет умножать любое переданное число на десять.
Несмотря на то что параметр b в данном случае равен по умолчанию 10 и необязателен для передачи в качестве второго аргумента, ты по‑прежнему можешь передавать второй аргумент, если это будет нужно, и тогда в качестве b будет использовано не 10 , а переданное значение.
Внутри программы мы можем вызывать созданную нами функцию сколько угодно раз.
Давай создадим программу, которая будет считать прибавку к зарплате за каждую уязвимость, которую хакер нашел на работе. У каждого хакера будет своя зарплата, в зависимости от его ранга, но начисление прибавки для всех работает по принципу «+2% к базовой зарплате за уязвимость, если таких уязвимостей найдено больше чем три».
Сделаем функцию, которая принимает в качестве аргументов размер зарплаты сотрудника и количество найденных уязвимостей. Для округления результата используем функцию round( ) , которая округлит прибавку до целого числа.
Функция getsize() модуля os.path возвращает размер файла в байтах, указанного в path . Если path не существует или недоступен, то поднимается исключение OSError .
Аргумент path может принимать байтовые или текстовые строки. Функция os.path.getsize() может принимать объект, представляющий путь к файловой системе, например такой как pathlib.PurePath .
Примеры использования:
Другие ответы работают на реальные файлы, но если вам нужно что-то, что работает для "файловых объектов", попробуйте следующее:
Он работает для реальных файлов и StringIO, в моем ограниченном тестировании. (Python 2.7.3.) API-интерфейс "file-like object", конечно, не является строгим интерфейсом, но API-документация предлагает что файловые объекты должны поддерживать seek() и tell() .
Edit
Другое отличие между этим и os.stat() заключается в том, что вы можете stat() файл, даже если у вас нет разрешения на его чтение. Очевидно, что подход seek/tell не будет работать, если у вас нет разрешения на чтение.
Изменить 2
В предположении Джонатона, здесь параноидальная версия. (Версия выше оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать из файла, вы получите нулевые байты!)
Как проверить размер файла в python? (python)
Другие ответы работают на реальные файлы, но если вам нужно что-то, что работает для "файловых объектов", попробуйте следующее:
Он работает для реальных файлов и StringIO, в моем ограниченном тестировании. (Python 2.7.3.) API-интерфейс "file-like object", конечно, не является строгим интерфейсом, но API-документация предлагает что файловые объекты должны поддерживать seek() и tell() .
Edit
Другое отличие между этим и os.stat() заключается в том, что вы можете stat() файл, даже если у вас нет разрешения на его чтение. Очевидно, что подход seek/tell не будет работать, если у вас нет разрешения на чтение.
Изменить 2
В предположении Джонатона, здесь параноидальная версия. (Версия выше оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать из файла, вы получите нулевые байты!)
Получить размер файла перед загрузкой в Python
я воспроизвел то, что вы видите:
что я здесь делаю не так? Это ОС.stat ().st_size не возвращает правильный размер?
изменить: Хорошо, я понял, в чем проблема:
убедитесь, что вы открываете оба файла для бинарного чтения/записи.
автор: Jonathan Works
Вычисление размера каталога с помощью Python?
следующий скрипт печатает размер каталога всех подкаталогов для указанного каталога. Он также пытается извлечь выгоду (если это возможно) из кэширования вызовов рекурсивных функций. Если аргумент опущен, скрипт будет работать в текущем каталоге. Выходные данные сортируются по размеру каталога от самых больших до самых маленьких. Так вы можете приспособить его для ваших потребностей.
EDIT: перемещен null_decorator выше, как рекомендовал user2233949
Как проверить размер файла в Python?
Другие ответы работают для реальных файлов, но если вам нужно что-то, что работает для «файловых объектов», попробуйте это:
Это работает для реальных файлов и StringIO, в моем ограниченном тестировании. (Python 2.7.3.) API "file-like object", конечно, не совсем строгий интерфейс, но документация API предполагает, что file-like объекты должны поддерживать seek() и tell() .
редактировать
Редактировать 2
По предложению Джонатона, вот параноидальная версия. (Приведенная выше версия оставляет указатель файла в конце файла, поэтому, если вы попытаетесь прочитать файл, вы получите ноль байтов назад!)
Автор: Mark E. Haase Размещён: 29.09.2013 03:41
Получить размер файла в python тремя способами
Существуют разные методы получения размера файла в python, и в этой статье объясняются 3 из этих методов с примерами.
Определение размера файла становится важным, когда вы хотите отслеживать определенный файл на предмет ограничения размера или когда вы хотите упорядочить файлы в каталоге на основе их размера.
Метод 1. Использование модуля os.path
Модуль Python os.path предоставляет функцию getsize , которая принимает путь к файлу в качестве аргумента и возвращает размер файла в байтах.
Пример,
Приведенный выше код дает следующий результат
Размер файла 760 байт
Метод 2: Использование функции stat
Модуль os Python предоставляет stat , которая принимает путь в качестве аргумента. Этот путь может быть строкой или объектом пути и возвращает структуру, содержащую статистические данные о предоставленном пути.
Эта структура имеет множество свойств, из которых свойство st_size содержит размер файла (в байтах), присутствующего по указанному пути.
Пример,
Вывод этого кода следующий
Размер файла 760 байт
Если вы распечатываете значение, возвращаемое функцией os.stats , тогда вы получите что-то вроде этого.
os.stat_result (st_mode = 33206, st_ino = 562949953421562, st_dev = 101961010, st_nlink = 1, st_uid = 0, st_gid = 0, st_size = 760, st_atime = 1554137744, st_mtime = 9353000, st_mtime = 9353000 = 15541377) Notice = 9351377 он имеет свойство st_size .
Метод 3: Использование файлового объекта
Откройте файл, размер которого необходимо определить с помощью функции open , и назначьте возвращаемый объект переменной. Возвращенный объект действует как дескриптор файла и может использоваться для различных операций обработки файлов.
Узнайте, как читать файл на Python , здесь .
Как только мы получим объект, указывающий на файл, необходимо предпринять следующие шаги, чтобы узнать размер файла с помощью этого метода.
- Первоначально, когда файл открыт, курсор файла указывает на начало файла. Файловый объект имеет метод seek , который используется для установки курсора в желаемое место.
Он принимает 2 аргумента: первый - это начальное положение, а второй - конечное положение, в которое будет помещен курсор.
Если первый аргумент не указан, то по умолчанию он равен 0, что означает начало файла. - Установите курсор в конец файла, используя метод seek , задав ему 0 в качестве начального значения и os.SEEK_END в качестве конечного значения, где SEEK_END - это константа, это модуль os и отмечает конец файл.
- Файловый объект имеет метод tell , который возвращает текущую позицию курсора. Это количество байтов, на которое переместился курсор.
- Таким образом, когда вы помещаете файловый курсор в конец файла, метод tell фактически вернет количество байтов в файле, которое также является размером файла.
Пример,
Вывод этого кода
Размер файла 760 байтов
Надеюсь, этот пост поможет вам в вычислении размера файла с использованием Python.
Python становится все популярнее благодаря относительной простоте изучения, универсальности и другим преимуществам. Правда, у начинающих разработчиков нередко возникают проблемы при работе с файлами и файловой системой. Просто потому, что они знают не все команды, которые нужно знать.
Эта статья предназначена как раз для начинающих разработчиков. В ней описаны 8 крайне важных команд для работы с файлами, папками и файловой системой в целом. Все примеры из этой статьи размещены в Google Colab Notebook (ссылка на ресурс — в конце статьи).
Показать текущий каталог
Самая простая и вместе с тем одна из самых важных команд для Python-разработчика. Она нужна потому, что чаще всего разработчики имеют дело с относительными путями. Но в некоторых случаях важно знать, где мы находимся.
Относительный путь хорош тем, что работает для всех пользователей, с любыми системами, количеством дисков и так далее.
Так вот, для того чтобы показать текущий каталог, нужна встроенная в Python OS-библиотека:
Ее легко запомнить, так что лучше выучить один раз, чем постоянно гуглить. Это здорово экономит время.
Имейте в виду, что я использую Google Colab, так что путь /content является абсолютным.
Проверяем, существует файл или каталог
Прежде чем задействовать команду по созданию файла или каталога, стоит убедиться, что аналогичных элементов нет. Это поможет избежать ряда ошибок при работе приложения, включая перезапись существующих элементов с данными.
Функция os.path.exists () принимает аргумент строкового типа, который может быть либо именем каталога, либо файлом.
В случае с Google Colab при каждом запуске создается папка sample_data. Давайте проверим, существует ли такой каталог. Для этого подойдет следующий код:
Эта же команда подходит и для работы с файлами:
Если папки или файла нет, команда возвращает false.
Объединение компонентов пути
В предыдущем примере я намеренно использовал слеш "/" для разделителя компонентов пути. В принципе это нормально, но не рекомендуется. Если вы хотите, чтобы ваше приложение было кроссплатформенным, такой вариант не подходит. Так, некоторые старые версии ОС Windows распознают только слеш "\" в качестве разделителя.
Но не переживайте, Python прекрасно решает эту проблему благодаря функции os.path.join (). Давайте перепишем вариант из примера в предыдущем пункте, используя эту функцию:
Создание директории
Ну а теперь самое время создать директорию с именем test_dir внутри рабочей директории. Для этого можно использовать функцию
os.mkdir():
Давайте посмотрим, как это работает на практике.
Если же мы попытаемся создать каталог, который уже существует, то получим исключение.
Именно поэтому рекомендуется всегда проверять наличие каталога с определенным названием перед созданием нового:
Еще один совет по созданию каталогов. Иногда нам нужно создать подкаталоги с уровнем вложенности 2 или более. Если мы все еще используем os.mkdir (), нам нужно будет сделать это несколько раз. В этом случае мы можем использовать os.makedirs (). Эта функция создаст все промежуточные каталоги так же, как флаг mkdir -p в системе Linux:
Вот что получается в результате.
Показываем содержимое директории
Еще одна полезная команда — os.listdir(). Она показывает все содержимое каталога.
Команда отличается от os.walk (), где последний рекурсивно показывает все, что находится «под» каталогом. os.listdir () намного проще в использовании, потому что просто возвращает список содержимого:
В некоторых случаях нужно что-то более продвинутое — например, поиск всех CSV-файлов в каталоге «sample_data». В этом случае самый простой способ — использовать встроенную библиотеку glob:
Перемещение файлов
Самое время попробовать переместить файлы из одной папки в другую. Рекомендованный способ — еще одна встроенная библиотека shutil.
Сейчас попробуем переместить все CSV-файлы из директории «sample_data» в директорию «test_dir». Ниже — пример кода для выполнения этой операции:
Кстати, есть два способа выполнить задуманное. Например, мы можем использовать библиотеку OS, если не хочется импортировать дополнительные библиотеки. Как os.rename, так и os.replace подходят для решения задачи.
Но обе они недостаточно «умные», чтобы позволить перемесить файлы в каталог.
Чтобы все это работало, нужно явно указать имя файла в месте назначения. Ниже — код, который это позволяет сделать:
Здесь функция os.path.basename () предназначена для извлечения имени файла из пути с любым количеством компонентов.
Другая функция, os.replace (), делает то же самое. Но разница в том, что os.replace () не зависит от платформы, тогда как os.rename () будет работать только в системе Unix / Linux.
Еще один минус — в том, что обе функции не поддерживают перемещение файлов из разных файловых систем, в отличие от shutil.
Поэтому я рекомендую использовать shutil.move () для перемещения файлов.
Копирование файлов
Аналогичным образом shutil подходит и для копирования файлов по уже упомянутым причинам.
Если нужно скопировать файл README.md из папки «sample_data» в папку «test_dir», поможет функция shutil.copy():
Удаление файлов и папок
Теперь пришел черед разобраться с процедурой удаления файлов и папок. Нам здесь снова поможет библиотека OS.
Когда нужно удалить файл, нужно воспользоваться командой os.remove():
Если требуется удалить каталог, на помощь приходит os.rmdir():
Однако он может удалить только пустой каталог. На приведенном выше скриншоте видим, что удалить можно лишь каталог level_3. Что если мы хотим рекурсивно удалить каталог level_1? В этом случае зовем на помощь shutil.
Функция shutil.rmtree() сделает все, что нужно:
Пользоваться ею нужно с осторожностью, поскольку она безвозвратно удаляет все содержимое каталога.
Собственно, на этом все. 8 важных операций по работе с файлами и каталогами в среде Python мы знаем. Что касается ссылки, о которой говорилось в анонсе, то вот она — это Google Colab Network с содержимым, готовым к запуску.
Читайте также: