Full transcript
Начало
0:00Привет. В ходе этого урока мы с вами
0:01научимся создавать, читать, а также
0:03записывать информацию в файлы на основе
0:06языка Python. А перед началом я бы хотел
0:08порекомендовать сайт itproger.com. На
0:11этом сайте вы найдёте код, домашние
0:12задания и много другой полезной
0:14информации. Ссылка на этот урок на сайте
0:16будет в описании к этому видео. В языке
Принципы работы с файлами
0:18Python существуют разные функции по
0:20работе с файлами. При этом вам нужно
0:22всегда помнить несколько нюансов.
0:24Во-первых, любой файл, с которым вы
0:25хотите работать, его изначально нужно
0:27открыть. Для этого существует одна
0:29определённая функция. После открытия
0:32файла вам необходимо что-либо выполнить
0:34с этим файлом. То есть, например, там
0:36прочитать информацию из него или
0:37наоборот вписать в него информацию. И
0:40далее после работы с файлом вам его
0:42всегда необходимо закрывать. И это
0:44важный момент, потому что многие
0:45забывают закрывать файл, и у них
0:47происходит утечка памяти. Если файлы вы
0:50не будете закрывать и вот откроете там
0:5210 файлов и все их забудете закрыть, то
0:54ваша программа, она уже будет достаточно
0:56перегружена, потому что программа будет
0:58тратить ресурсы на обработку каждого из
1:01открытых файлов. Ну и, соответственно,
1:02будет идти утечка памяти. Поэтому после
1:05того, как вы открыли файл и поработали с
1:07ним, всегда его нужно закрывать. Ну и
1:09сейчас мы это как раз всё с вами
1:11научимся делать за счёт языка Python.
1:13Итак, для начала давайте попробуем
Открытие файла
1:15открыть какой-либо файл. Сперва я
1:17давайте создам некую переменную. Пускай
1:19эта переменная будет называться как
1:20файл. У неё название может быть каким
1:22угодно. Я её, например, назову как файл.
1:24Именно в эту переменную я и помещу
1:26открытый файл. И именно через эту
1:28переменную я и буду работать с этим
1:30файлом. Далее, чтобы открыть файл, мне
1:32необходимо использовать такую функцию,
1:34которая называется как Open. Эта
1:36функция, она принимает несколько
1:38параметров. Мы укажем сейчас первый
1:39параметр. И в этом первом параметре я
1:41просто говорю, какой конкретно файл я
1:43буду открывать. Предположим, что я буду
1:46открывать файл, который пускай будет
1:48называться как.txt.
1:51Причём на данный момент вы можете
1:52заметить, что у меня этого файла нет в
1:54проекте. И если такого файла нет у вас в
1:56проекте, то он будет создан
1:58автоматически. Также, если вы хотите,
2:00чтобы файл был создан в какой-то
2:02отдельной папке, то на самом-то деле вы
2:04можете, ну, здесь прописать название
2:06нужной папки, например, дата. Дальше
2:08указываете сш и говорите, что в этой
2:10папке у вас будет создан нужный вам
2:13файл. Вот мы давайте даже создадим,
2:14пожалуй, такую папку. А, а сам файл, он
2:17уже будет создан автоматически внутри
2:19самой этой папки. Ну и папку я, конечно
2:21же, называю как-то. И внутри этой папки
2:23у меня будут храниться все файлы. После
2:26того, как мы указали нужный файл,
2:28который нам необходимо открыть, нам
2:29также необходимо ещё указать второй
2:31параметр. И во втором параметре мы
2:33указываем способ открытия файла. Дело в
2:37том, что существуют разные способы
2:38открытия файла. можно открыть файл для
2:40чтения, можно открыть файл для записи,
2:43можно просто открыть файл для его
2:45создания и, например, там записи, ну и
2:47так далее. Мы сейчас с вами будем
2:49использовать такой режим, который
2:50называется как W. Он он означает то, что
2:53мы открываем файл для чтения, то есть WR
2:55right. Также информация относительно
2:56других режимов представлена на сайте IT
2:59Proger. Ссылку на этот урок на сайт я
3:01оставлю в описании к этому видео. Там вы
3:02можете перейти, и там будет удобная
3:04табличка, в которой будут расписаны
3:06различные форматы. Некоторые из них мы
3:08сейчас изучим, но некоторые просто редко
3:10используются и, соответственно, они
3:11будут приведены просто в самой этой
3:13табличке. Так вот, смотрите, на данный
3:15момент мы с вами как бы указали то, что
3:17мы открываем определённый файл и указали
3:20режим его открытия. Мы открываем его для
3:22дальнейшей записи информации внутрь
3:24него. Следующее, что я всегда вам
3:26предлагаю делать, так это сразу
3:28закрывать сам файл. Для этого мы просто
3:30обращаемся к файлу и обращаемся к
3:32функции close. Вот таким вот вот таким
3:35вот образом. Если вы просто забудете
3:39закрыть файл, то у вас будет утечка
3:41памяти. Поэтому лучше вы сразу всегда
3:42это делайте. А уже между функцией open,
3:45а также между функцией close вы как раз
3:47и прописываете работу с самим файлом.
Запись данных в файл
3:51Например, здесь я просто хочу указать
3:53то, что я буду помещать некую информацию
3:54в файл. Для этого я обращаюсь опять же к
3:57нашей переменной файл. Обращаюсь к
3:59методу WR right. И метод write он
4:01позволяет нам занести некую строку,
4:04некий текст внутрь файла. Здесь может
4:06быть любой текст, какой только захотите.
4:08Давайте мы здесь просто поместим строку
4:10Hello. Ну и пока больше ничего
4:12дополнительно дописывать не будем. Если
4:14сейчас запустить программу, замечаем,
4:16что ничего не было выведено в консоль.
4:17Это вполне логично, потому что мы здесь
4:19ничего не выводили. В то же время внутри
4:22папки data у нас уже здесь есть новый
4:24файл. И в этом файле у нас как как раз
4:26прописано слово hello. Всё обработалось
4:28максимально корректно. Дополнительно,
4:31если вы хотите указать здесь несколько
4:33строчек кода, несколько строчек текста,
4:35вернее, то вы можете здесь указать
4:37несколько раз вот этот вот файл right.
4:40Ну и, например, здесь я давайте добавлю
4:41ещё три восклицательных знака. Если я
4:44такое запущу, то мы заметим, что,
4:45видите, вот у нас здесь было прописано
4:47hello. А дополнительно ещё к этому же
4:49тексту были добавлены три
4:50восклицательных знака. Причём вы можете
4:53заметить, что у нас не было перевода на
4:55новую строку. Несмотря на то, что мы
4:56вызвали два раза метод write, у нас не
4:58было перевода на новую строку. Так
5:00происходит по той причине, что здесь, в
5:02отличие от метода print, у нас в конце
5:04не добавляется перевод на новую строку.
5:07Если нам нужен перевод на новую строку,
5:08мы его можем прописать самостоятельно.
5:10Ну и он прописывается следующим образом.
5:12Это сN, то есть мы как мы как бы
5:14говорим, что мы переходим на новую
5:16строку. Если же мы сейчас с вами такое
5:18запустим, то мы заметим, что видите, вот
5:20у нас идёт hello, а уже с новой строки
5:23идут три восклицательных знака. Причём,
5:25сколько бы раз я сейчас не запускал
5:27программу, у нас каждый раз не будет
5:29добавляться этот текст к предыдущему. У
5:31нас каждый раз просто открывается этот
5:33файл, с него стирается полностью вся
5:35информация и вместо прошлой информации
5:37записывается некая новая информация. Так
5:40происходит из-за того, что у нас сейчас
5:41метод работы с файлом, он указан здесь
5:44как write. То есть этот метод, он
5:46позволяет нам просто открыть файл. Если
5:48этого файла не существует, то файл будет
5:49создан. И дальше каждый раз при записи
5:52информации у нас полностью вся
5:53предыдущая информация удаляется и
5:54записывается новая информация. Если же
5:57мы хотим к текущей информации добавить
6:00новую информацию в её конец, да, то
6:02нужно использовать метод открытия
6:04файлов, как а он расшифровывается как
6:07append, то есть добавление информации.
6:10Работает он точно так же само, как и
6:11предыдущий формат. Вот только в этот раз
6:14у нас к текущей информации будет
6:17добавляться новая информация. Поэтому,
6:18видите, у нас здесь было написано Hello.
6:20Потом
6:21три восклицательных знака и дальше в
6:24самый конец, вот, а, конец у нас был
6:26здесь, у нас добавляется новый текст. И
6:28этот текст, он опять же тот же самый,
6:29что и был ранее, да? То есть это hello и
6:31три восклицательных знака. Если я ещё
6:33раз вот один раз запущу, второй раз
6:35запущу, допустим, третий раз запущу, то
6:36каждый раз мы заметим, что у нас
6:38постоянно вот добавляется этот текст. Ну
6:40и он добавляется уже к текущему
6:41предыдущему значению. То есть, если
6:44нужно просто переписать файл, то
6:46используйте формат WR, то есть буковочку
6:48W. Если нужно добавить информацию, то
6:50используйте формат А, то есть append, то
6:52есть добавление некой информации. Ну и
6:56также мы давайте рассмотрим что-то ещё
6:57более интересное. Мы давайте с вами
Пользовательские данные
7:00лучше попробуем сделать так, чтобы у нас
7:01пользователь вводил информацию через
7:04консоль. И дальше мы эту консоль мы и
7:06дальше мы эту информацию, вернее, будем
7:07как раз и добавлять внутрь файла.
7:09Соответственно, здесь я укажу некую
7:12переменную дата. Мы внутрь этой
7:15переменной будем устанавливать значение,
7:17что получим от пользователя. Здесь будет
7:18написано: "Введите текст". Ну, например,
7:20что-то в этом духе. Также я давайте,
7:22наверное, формат открытия файла всё-таки
7:24установлю как right, то есть буквочку W.
7:27Просто чтобы у нас каждый раз
7:28переписывалась вся информация, что была
7:30в файле. Ну и далее мы, давайте здесь,
7:33наверное, будем лишь
7:34один раз использовать функцию WR right.
7:37И внутрь этой функции мы с вами будем
7:39помещать информацию от пользователя, да?
7:42То есть мы помещаем по сути
7:44ну по сути то значение, которое будет
7:45находиться в переменной дата. Если я
7:47сейчас такое запущу и здесь мы напишем
7:50Hello world, допустим, что-то в этом
7:52духе, нажму Enter. В таком случае
7:54программа завершилась. И если зайти в
7:55файл, то всё обработалось здесь
7:57абсолютно корректно, как мы это можем с
7:59вами как раз и заметить. Также возможно,
8:02я бы хотел ещё сюда добавлять в конец
8:04всегда перевод на новую строку и плюс,
8:06наверное, всё-таки давайте мы прошлый
8:09формат будем использовать, да, это
8:11append. Единственное, тогда немного
8:13видоизменю текст, чтобы у нас просто как
8:15бы был уже перевод на новую строку и
8:16чтобы мы следующий текст добавляли
8:17именно с новой строки. Ну и ещё раз
8:19давайте, наверное, я просто запущу
8:21программу. Здесь мы напишем что-то My
8:24app is cool, что-то в этом духе, да? То
8:27есть моя программа крутая. Нажмём ещё
8:29раз Enter. И вот мы замечаем, что,
8:31видите, у нас был Hello World, потом
8:32добавился новый текст и плюс у нас опять
8:34же идёт ещё перевод на новую строку. Всё
8:36обрабатывается верно. Теперь же мы
8:39давайте научимся с вами ещё считывать
8:41данные из какого-либо файла. Для
8:44считывания данных нам необходимо
Считывание данных
8:46использовать по сути всю ту же самую
8:48логику. То есть мы должны изначально
8:49открыть файл, дальше мы должны считать
8:51данные, а дальше мы должны закрыть сам
8:53по себе файл. Мы давайте для начала
8:55закомментируем все вот эти вот сторочки
8:57кода, чтобы они нам просто больше не
8:59мешали. Мы будем сейчас работать
9:00конкретно с считыванием данных, да,
9:03поэтому мы их закомментируем даже
9:04немного. Я их вот так вот сверну. Ну и
9:06дальше пропишем новый наш код. Итак,
9:09здесь я, наверное, создам перемену,
9:11укажу ей точно такое же название,
9:12например, как файл. Конечно же, название
9:14может быть каким угодно, но это вполне
9:16логичное название, поэтому такое
9:17указываю. Далее обращаюсь опять-таки к
9:19функции open. И здесь мне необходимо
9:22указать в качестве первого параметра -
9:24это файл, который я буду открывать. В
9:25моём случае это файл, который находится
9:27в папке data, и он называется text.txt.
9:30Ну и дальше нужно указать формат
9:32открытия этого файла. Мы открываем файл
9:34для чтения, поэтому здесь я указываю
9:36буквочку R. Она означает то, что мы
9:38открываем его для формата read или же
9:41чтения. Также опять же предлагаю вам
9:43сразу в конце указывать close, чтобы
9:45просто не забыть закрыть файл, потому
9:48что если это вы забудете, то будет, ну,
9:50небольшие програм небольшие проблемки,
9:52ваша программа будет тормозить. Ну и
9:54теперь мы давайте попробуем с вами
9:55сделать следующее. Мы обратимся к файлу
9:58и обратимся к такой функции, которая
10:01называется как read. И давайте пока вот
10:04давайте пока вот просто попробуем это
10:05запустить и посмотреть, что же у нас
10:07получится. Конечно, ничего у нас не
10:09получится, потому что я забыл это ещё
10:10вывести на экран. Ну давайте вот теперь
10:12попробуем это запустить. И вот мы
10:14замечаем, что если мы просто обращаемся
10:16к функции read, то эта функция, если
10:19никаких параметров не передавать, то она
10:20просто берёт полностью весь текст, что
10:23находится в самом файле, и полностью
10:24весь этот текст она его возвращает. В
10:26нашем случае он сразу ещё был выведен на
10:28экран. Помимо этого, мы ещё можем сюда
10:30передавать параметры. Это будет число. И
10:33за счёт этого числа мы указываем,
10:34сколько символов должно быть выведено на
10:36экран. Например, указываю единицу и
10:39будет выведен лишь один символ. Вот у
10:41нас буквочка H и было выведено. Укажу,
10:44например, четыре. И первые четыре
10:45символа как раз и будут выведены. Вот у
10:47нас было выведено Hell. Также могу
10:49указать, например, здесь 20. Ну и,
10:51соответственно, первые 20 символов, они
10:53и будут выведены. То бишь, если нужно
10:55прочитать полностью весь текст, то в
10:56таком случае используем readт без
10:58передачи параметра. Если нужно а вывести
11:01несколько символов, то ещё плюс
11:02указываем число. И, соответственно,
11:04такое количество символов, оно и будет
11:06выведено. И если вдруг вам необходимо
11:08считывать файл построчно, то в таком
11:10случае мы можем создать здесь цикл. То
11:13есть мы создаём цикл for. Здесь давайте
11:15я переменную назву, например, как lйн. И
11:17дальше я говорю, что я всё это перебираю
11:19внутри нашего как раз файла. Также,
11:22наверное, вот этот вывод информации я
11:23здесь закомментирую, чтобы просто
11:25дополнительно не выводилось ничего. Ну и
11:27здесь я просто давайте буду выводить на
11:29экран саму эту переменную. То есть
11:31используем print и используем переменную
11:34нашу l. В таком случае мы замечаем, что
11:36у нас всё было выведено. При этом между
11:38строчками у нас был проставлен один
11:40дополнительный пропуск. Такое произошло
11:42по причине того, что за счёт лайн, за
11:44счёт вообще этого всего цикла мы
11:46считывали по одной строке. При этом в
11:49каждой из этих строк у нас в конце идёт
11:51как бы ещё перевод на новую строку. Мы
11:53его здесь как бы не видим, но на
11:54самом-то деле он, конечно же, есть.
11:56Поэтому, когда мы считываем по одной
11:58строке, мы получаем определённый текст,
12:00дальше получаем перевод на новую строку
12:02и print. вот этот вот метод, вот это вот
12:04эта вот функция, она дополнительно ещё
12:06делает один перевод строки. Поэтому мы и
12:08получаем, что у нас идёт здесь как бы
12:10один дополнительный такой вот пропуск.
12:12Точно то же самое вот здесь. И плюс,
12:14поскольку мы ещё и поскольку мы ещё
12:16считали и третью строку, то у нас как бы
12:18здесь в конце ещё были созданы два таких
12:20дополнительных пропуска. Вот. Если не
12:22хотите, чтобы создавались все эти
12:24пропуски, опять же используем end. Здесь
12:27указываем пустую строку. И в таком
12:28случае, видите, вот оно всё срабатывает
12:31точно так же, как и срабатывало при
12:32методе read. То бишь для чтения файла вы
12:35можете использовать либо функцию read и
12:37можете передавать в неё количество
12:39символов, которые вы хотите получить,
12:41либо можете использовать цикл для чтения
12:43по одной строке из самого файла. В
Заключительная часть
12:46общем, и на этом наш урок подходит к
12:48концу. В этом уроке мы научились
12:49работать с файлами через язык Python. Ну
12:51и при работе с файлами вам нужно помнить
12:53лишь несколько вещей. Во-первых, файл
12:55всегда нужно открыть. Причём нужно
12:56указать верный формат открытия. Далее с
12:59файлом нужно поработать. Ну и после
13:01окончания работы вам его всегда
13:03необходимо закрывать. Если вы будете
13:05следовать вот этим вот трём простым
13:06пунктам, то, соответственно, вы спокойно
13:08сможете работать с любыми файлами через
13:10язык Python. У меня же на этом всё. Так
13:12что увидимся с вами в дальнейшем. До
13:14скорых встреч. Пока. M.