Каких правил следует придерживаться при работе с файлами выберите правильный оператор
Обновлено: 21.11.2024
В любом языке программирования код должен принимать решения и выполнять действия соответственно в зависимости от различных входных данных. Например, в игре, если количество жизней игрока равно 0, игра окончена. В погодном приложении, если оно просматривается утром, покажите график восхода солнца; показать звезды и луну, если это ночь. В этой статье мы рассмотрим, как в JavaScript работают так называемые условные операторы.
Требования: | Базовая компьютерная грамотность, базовое понимание HTML и CSS, первые шаги в JavaScript. |
---|---|
Цель: | Понять, как использовать условные структуры в JavaScript. |
Вы можете получить его при одном условии.
Люди (и другие животные) постоянно принимают решения, влияющие на их жизнь, от мелких ("должен ли я съесть одно печенье или два?") до серьезных ("должен ли я остаться в своей родной стране и работать на отцовском ферму, или мне переехать в Америку и изучать астрофизику?")
если. операторы else
Давайте рассмотрим самый распространенный тип условного оператора, который вы будете использовать в JavaScript, — скромный if. оператор else.
Основные, если . иначе синтаксис
Основные, если. Синтаксис else в псевдокоде выглядит следующим образом:
- Ключевое слово, если за ним следуют круглые скобки.
- Условие для проверки, помещенное в круглые скобки (обычно "является ли это значение больше, чем это другое значение?" или "существует ли это значение?"). Условие использует операторы сравнения, которые мы обсуждали в предыдущем модуле, и возвращает значение true или false .
- Набор фигурных скобок, внутри которых у нас есть некоторый код — это может быть любой код, который нам нравится, и он выполняется, только если условие возвращает true .
- Ключевое слово еще .
- Еще один набор фигурных скобок, внутри которого у нас есть еще код — это может быть любой код, который нам нравится, и он выполняется только в том случае, если условие не истинно — или, другими словами, условие ложно .
Этот код вполне удобочитаем — он говорит: "Если условие возвращает true , запустите код A, иначе запустите код B"
Обратите внимание, что вам не нужно включать блок else и вторую фигурную скобку — следующий код также является вполне допустимым:
Однако здесь нужно быть осторожным — в этом случае второй блок кода не контролируется условным оператором, поэтому он выполняется всегда, независимо от того, возвращает ли условие значение true или false . Это не обязательно плохо, но это может быть не то, что вам нужно — часто вам нужно запустить один блок кода или другой, а не оба.
В заключение, хотя это и не рекомендуется, иногда вы можете видеть, если. операторы else, написанные без фигурных скобок:
Этот синтаксис абсолютно корректен, но его гораздо легче понять, если вы используете фигурные скобки для разделения блоков кода, а также используете несколько строк и отступы.
Реальный пример
Чтобы лучше понять этот синтаксис, давайте рассмотрим реальный пример. Представьте себе ребенка, которого мать или отец просят о помощи по дому. Родитель может сказать: «Привет, дорогая! Если ты поможешь мне пойти за покупками, я дам тебе дополнительное пособие, чтобы ты мог позволить себе ту игрушку, которую хотел». В JavaScript мы могли бы представить это так:
Этот код, как показано, всегда приводит к тому, что переменная shoppingDone возвращает false , что означает разочарование для нашего бедного ребенка. Мы должны предоставить родительскому механизму возможность установить для переменной shoppingDone значение true, если дочерний элемент совершал покупки.
Примечание. Вы можете увидеть более полную версию этого примера на GitHub (также посмотреть, как он работает в реальном времени).
иначе, если
В последнем примере у нас было два варианта или результата. Но что, если нам нужно больше двух?
Есть способ связать дополнительные варианты/результаты с вашим "если". else — использование else if . Каждый дополнительный выбор требует дополнительного блока для размещения между if() < . >и еще < . >— взгляните на следующий более сложный пример, который может быть частью простого приложения прогноза погоды:
- Здесь у нас есть HTML-элемент, позволяющий выбирать различную погоду, и простой абзац.
- В JavaScript мы храним ссылку как на , так и на
Примечание. Вы также можете найти этот пример на GitHub (посмотрите, как он работает там же).
Примечание об операторах сравнения
- === и !== — проверяют, идентично ли одно значение другому или нет.
- и > — проверить, больше или меньше одно значение другого.
- и >= — проверяет, меньше или равно ли одно значение другому или больше или равно ему.
Примечание: просмотрите материал по предыдущей ссылке, если хотите освежить свои воспоминания об этом.
Мы хотели особо отметить проверку логических значений ( true / false ) и общий шаблон, с которым вы будете сталкиваться снова и снова. Любое значение, отличное от false , undefined , null , 0 , NaN или пустой строки ( '' ), на самом деле возвращает true при проверке в качестве условного оператора, поэтому вы можете использовать имя переменной отдельно, чтобы проверить, истинно ли оно. или даже то, что он существует (то есть не является неопределенным). Так, например:
И, возвращаясь к нашему предыдущему примеру о ребенке, выполняющем работу по дому за своего родителя, вы могли бы написать это так:
Вложенность, если . еще
Вполне нормально поставить один if. оператор else внутри другого — для их вложения. Например, мы могли бы обновить наше приложение прогноза погоды, чтобы отображать дополнительный набор вариантов в зависимости от температуры:
Несмотря на то, что весь код работает вместе, каждый if. Оператор else работает полностью независимо от другого.
Логические операторы: И, ИЛИ и НЕ
Если вы хотите протестировать несколько условий без написания вложенных условий if. операторы else, логические операторы могут вам помочь. При использовании в условиях первые два делают следующее:
- && — И; позволяет объединить два или более выражений в цепочку, чтобы каждое из них по отдельности оценивалось как true, чтобы все выражение возвращало true .
- || - ИЛИ; позволяет объединить два или более выражений в цепочку, так что одно или несколько из них должны иметь значение true по отдельности, чтобы все выражение вернуло значение true .
Чтобы дать вам пример с И, предыдущий фрагмент примера можно переписать следующим образом:
Например, первый блок кода будет запущен только в том случае, если option === 'sunny' и Temperature возвращает значение true .
Давайте рассмотрим быстрый пример операции ИЛИ:
Последний тип логического оператора NOT, выраженный символом ! оператор, может использоваться для инвертирования выражения. Давайте объединим его с ИЛИ в приведенном выше примере:
В этом фрагменте кода, если оператор OR возвращает значение true , оператор NOT инвертирует его, так что общее выражение возвращает значение false .
Вы можете комбинировать столько логических утверждений, сколько хотите, в любой структуре. В следующем примере внутренний код выполняется только в том случае, если оба оператора OR возвращают значение true, а это означает, что общий оператор AND возвращает значение true:
Распространенной ошибкой при использовании логического оператора ИЛИ в условных операторах является попытка указать переменную, значение которой вы проверяете, один раз, а затем указать список значений, которые могут возвращать значение true, разделенных символом || (ИЛИ) операторы. Например:
В этом случае условие внутри if(. ) всегда будет оцениваться как истинное, поскольку 7 (или любое другое ненулевое значение) всегда оценивается как истинное. Это условие на самом деле говорит: «Если x равно 5 или 7 верно, что всегда так». Это логически не то, что мы хотим! Чтобы это работало, вы должны указать полный тест с обеих сторон каждого оператора ИЛИ:
операторы переключения
если. Инструкции else хорошо справляются с работой по включению условного кода, но они не лишены недостатков. Они в основном хороши для случаев, когда у вас есть несколько вариантов, и каждый из них требует запуска разумного объема кода и/или сложных условий (например, нескольких логических операторов). В случаях, когда вы просто хотите установить переменную в определенное значение или распечатать конкретный оператор в зависимости от условия, синтаксис может быть немного громоздким, особенно если у вас есть большое количество вариантов.
В таком случае вам помогут операторы switch: они принимают одно выражение/значение в качестве входных данных, а затем просматривают ряд вариантов, пока не найдут тот, который соответствует этому значению, выполняя соответствующий код, который идет вместе с Это. Вот еще немного псевдокода, чтобы дать вам представление:
- Ключевое слово switch , за которым следует набор скобок.
- Выражение или значение в круглых скобках.
- Ключевое слово case , за которым следует выбор выражения/значения, за которым следует двоеточие.
- Некоторый код для запуска, если выбор соответствует выражению.
- Инструкция break, за которой следует точка с запятой. Если предыдущий выбор соответствует выражению/значению, браузер прекращает выполнение блока кода здесь и переходит к любому коду, который появляется после оператора switch.
- Сколько угодно других случаев (пункты 3–5).
- Ключевое слово default , за которым следует точно такой же шаблон кода, что и в одном из вариантов (пункты 3–5), за исключением того, что после default нет выбора, и вам не нужно прерывать оператор, поскольку там ничего нет. чтобы запустить после этого в блоке в любом случае. Это вариант по умолчанию, который запускается, если ни один из вариантов не подходит.
Примечание: вам не нужно включать раздел по умолчанию — вы можете безопасно опустить его, если нет шансов, что выражение может в конечном итоге равняться неизвестному значению. Однако, если это возможно, вам необходимо включить его для обработки неизвестных случаев.
Пример переключения
Давайте рассмотрим реальный пример — мы перепишем наше приложение прогноза погоды, чтобы вместо него использовать оператор switch:
Примечание. Вы также можете найти этот пример на GitHub (посмотрите, как он работает там же).
Тернарный оператор
Есть последний фрагмент синтаксиса, с которым мы хотим вас познакомить, прежде чем мы поиграем с некоторыми примерами. Тернарный или условный оператор — это небольшая часть синтаксиса, которая проверяет условие и возвращает одно значение/выражение, если оно истинно, и другое, если оно ложно — это может быть полезно в некоторых ситуациях и может занимать намного меньше кода, чем если. else заблокируйте, если у вас есть два варианта выбора между ними с помощью условия true/false. Псевдокод выглядит так:
Давайте рассмотрим простой пример:
Здесь у нас есть переменная с именем isBirthday — если это правда, мы отправляем нашему гостю сообщение с днем рождения; если нет, мы даем ей стандартное ежедневное приветствие.
Пример тернарного оператора
Тернарный оператор предназначен не только для установки значений переменных; вы также можете запускать функции или строки кода — все, что вам нравится. В следующем живом примере показано простое средство выбора темы, в котором стиль сайта применяется с помощью тернарного оператора.
Здесь у нас есть элемент для выбора темы (черный или белый) плюс простой
для отображения заголовка веб-сайта. У нас также есть функция update(), которая принимает два цвета в качестве параметров (входных данных). Цвет фона веб-сайта устанавливается на первый предоставленный цвет, а цвет текста — на второй предоставленный цвет.
Наконец, у нас также есть прослушиватель событий onchange, который служит для запуска функции, содержащей тернарный оператор. Он начинается с тестового условия — select.value === 'black' . Если это возвращает true , мы запускаем функцию update() с параметрами черного и белого цвета, что означает, что мы получаем черный цвет фона и белый цвет текста. Если он возвращает false , мы запускаем функцию update() с параметрами белого и черного цвета, что означает инвертирование цвета сайта.
Примечание. Вы также можете найти этот пример на GitHub (посмотрите, как он работает там же).
Активное обучение: простой календарь
В этом примере вы поможете нам закончить простое приложение-календарь. В полученном коде:
- Элемент, позволяющий пользователю выбирать между разными месяцами.
- Обработчик события onchange для обнаружения изменения значения, выбранного в меню.
- Функция createCalendar(), которая рисует календарь и отображает правильный месяц в
Нам нужно, чтобы вы написали условный оператор внутри функции-обработчика onchange сразу после комментария // ADD CONDITIONAL HERE. Это должно:
- Посмотрите на выбранный месяц (хранится в переменной выбора. Это будет значение элемента после изменения значения, например, "Январь").
- Задайте для переменной days количество дней в выбранном месяце. Для этого вам нужно будет найти количество дней в каждом месяце года. В этом примере можно игнорировать високосные годы.
- Рекомендуется использовать логическое ИЛИ, чтобы сгруппировать несколько месяцев в одно условие; многие из них имеют одинаковое количество дней.
- Подумайте, какое количество дней является наиболее распространенным, и используйте его как значение по умолчанию.
Если вы допустили ошибку, вы всегда можете сбросить пример с помощью кнопки "Сбросить". Если вы действительно застряли, нажмите "Показать решение", чтобы увидеть решение.
Активное обучение: больше вариантов цвета
В этом примере вы возьмете пример с тернарным оператором, который мы видели ранее, и преобразуете тернарный оператор в оператор switch, чтобы мы могли применить больше вариантов к простому веб-сайту. Посмотрите на — на этот раз вы увидите, что у него не два варианта темы, а пять. Вам нужно добавить оператор switch непосредственно под комментарием // ADD SWITCH STATEMENT:
- Он должен принимать переменную выбора в качестве входного выражения.
- В каждом случае выбор должен соответствовать одному из возможных значений, которые можно выбрать, то есть белый , черный , фиолетовый , желтый или психоделический .
- Для каждого случая следует запустить функцию update() и передать ей два значения цвета: первое для цвета фона и второе для цвета текста. Помните, что значения цвета — это строки, поэтому их необходимо заключать в кавычки.
Если вы допустили ошибку, вы всегда можете сбросить пример с помощью кнопки "Сбросить". Если вы действительно застряли, нажмите "Показать решение", чтобы увидеть решение.
Проверьте свои навыки!
Вы дошли до конца этой статьи, но можете ли вы вспомнить самую важную информацию? Вы можете найти дополнительные тесты, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше — см. Проверка своих навыков: условия.
Заключение
И это все, что вам нужно знать об условных структурах в JavaScript прямо сейчас! Если вы что-то не поняли, прочтите статью еще раз или свяжитесь с нами, чтобы попросить о помощи.
Привет! Если вы хотите научиться работать с файлами в Python, то эта статья для вас. Работа с файлами — важный навык, который должен освоить каждый разработчик Python, так что давайте начнем.
Из этой статьи вы узнаете:
- Как открыть файл.
- Как прочитать файл.
- Как создать файл.
- Как изменить файл.
- Как закрыть файл.
- Как открывать файлы для нескольких операций.
- Как работать с методами файлового объекта.
- Как удалить файлы.
- Как работать с контекстными менеджерами и чем они полезны.
- Как обрабатывать исключения, которые могут возникнуть при работе с файлами.
- и многое другое!
Начнем! ✨
🔹 Работа с файлами: базовый синтаксис
Одной из наиболее важных функций, которые вам понадобятся при работе с файлами в Python, является open() , встроенная функция, которая открывает файл и позволяет вашей программе использовать его и работать с ним. р>
Это основной синтаксис:
💡 Совет. Это два наиболее часто используемых аргумента для вызова этой функции. Есть шесть дополнительных необязательных аргументов. Чтобы узнать о них больше, прочитайте эту статью в документации.
Первый параметр: файл
Первым параметром функции open() является файл, абсолютный или относительный путь к файлу, с которым вы пытаетесь работать.
Обычно мы используем относительный путь, который указывает, где находится файл относительно местоположения скрипта (файла Python), вызывающего функцию open().
Например, путь в этом вызове функции:
Содержит только имя файла. Это можно использовать, когда файл, который вы пытаетесь открыть, находится в том же каталоге или папке, что и скрипт Python, например:
Но если файл находится во вложенной папке, например:
Файл names.txt находится в папке "data"
Затем нам нужно использовать определенный путь, чтобы сообщить функции, что файл находится в другой папке.
В этом примере это будет путь:
Обратите внимание, что мы сначала пишем data/ (имя папки, за которым следует символ / ), а затем name.txt (имя файла с расширением).
💡 Совет. Три буквы .txt, следующие за точкой в файле name.txt, — это «расширение» файла или его тип. В этом случае .txt указывает, что это текстовый файл.
Второй параметр: режим
Второй параметр функции open() — это режим, строка из одного символа. Этот единственный символ в основном сообщает Python, что вы планируете делать с файлом в своей программе.
- Читать ("r").
- Добавить ("a")
- Напишите ("w")
- Создать ( "x" )
Вы также можете открыть файл в:
Чтобы использовать текстовый или двоичный режим, вам необходимо добавить эти символы в основной режим. Например: "wb" означает запись в двоичном режиме.
💡 Совет: Режимы по умолчанию: чтение ("r") и текст ("t"), что означает "открыть для чтения текста" ("rt"), поэтому указывать их в open( ), если вы хотите их использовать, потому что они назначаются по умолчанию. Вы можете просто написать open() .
Почему режимы?
Для Python действительно имеет смысл предоставлять только определенные разрешения в зависимости от того, что вы планируете делать с файлом, верно? Почему Python должен позволять вашей программе делать больше, чем необходимо? Именно поэтому существуют режимы.
Подумайте об этом — позволить программе делать больше, чем необходимо, может быть проблематично. Например, если вам нужно только прочитать содержимое файла, может быть опасно позволять вашей программе неожиданно изменять его, что потенциально может привести к ошибкам.
🔸 Как прочитать файл
Теперь, когда вы больше знаете об аргументах, которые принимает функция open(), давайте посмотрим, как можно открыть файл и сохранить его в переменной для использования в программе.
Это основной синтаксис:
Мы просто присваиваем возвращаемое значение переменной. Например:
Я знаю, что вы можете спросить: какой тип значения возвращает open()?
Ну, файловый объект.
Давайте немного поговорим о них.
Файловые объекты
Согласно документации Python файловый объект это:
Объект, предоставляющий ориентированный на файл API (с такими методами, как read() или write()) базовому ресурсу.
По сути, это говорит нам о том, что файловый объект — это объект, который позволяет нам работать и взаимодействовать с существующими файлами в нашей программе Python.
Файловые объекты имеют такие атрибуты, как:
Теперь давайте посмотрим, как можно получить доступ к содержимому файла через файловый объект.
Способы чтения файла
Чтобы мы могли работать с файловыми объектами, нам нужен способ "взаимодействовать" с ними в нашей программе, и это именно то, что делают методы. Давайте посмотрим на некоторые из них.
Прочитать()
Первый метод, о котором вам нужно узнать, это read() , который возвращает все содержимое файла в виде строки.
Вот пример:
Вы можете использовать функцию type(), чтобы убедиться, что значение, возвращаемое функцией f.read(), является строкой:
Да, это строка!
В данном случае был напечатан весь файл, потому что мы не указали максимальное количество байтов, но мы можем сделать и это.
Вот пример:
Возвращаемое значение ограничено этим количеством байтов:
❗️Важно: файл необходимо закрыть после завершения задачи, чтобы освободить ресурсы, связанные с файлом. Для этого вам нужно вызвать метод close(), например:
Readline() и Readlines()
Вы можете прочитать файл построчно с помощью этих двух методов. Они немного отличаются, поэтому давайте рассмотрим их подробнее.
readline() читает одну строку файла, пока не достигнет конца этой строки. Завершающий символ новой строки ( \n ) сохраняется в строке.
💡 Совет. При желании вы можете указать размер, максимальное количество символов, которое вы хотите включить в результирующую строку.
Это первая строка файла.
Напротив, readlines() возвращает список со всеми строками файла в виде отдельных элементов (строк). Это синтаксис:
Обратите внимание, что в конце каждой строки, кроме последней, есть символ \n (символ новой строки).
💡 Совет. Тот же список можно получить с помощью list(f) .
Вы можете работать с этим списком в своей программе, назначив его переменной или используя его в цикле:
Мы также можем перебирать f напрямую (файловый объект) в цикле:
Это основные методы, используемые для чтения файловых объектов. Теперь давайте посмотрим, как вы можете создавать файлы.
🔹 Как создать файл
Если вам нужно создать файл "динамически" с помощью Python, вы можете сделать это в режиме "x".
Посмотрим, как. Это основной синтаксис:
Вот пример. Это мой текущий рабочий каталог:
Если я запускаю эту строку кода:
Создается новый файл с таким именем:
В этом режиме вы можете создать файл, а затем динамически писать в него, используя методы, которые вы изучите за несколько минут.
💡 Совет. Изначально файл будет пустым, пока вы его не измените.
Любопытно, что если вы попытаетесь запустить эту строку еще раз, а файл с таким именем уже существует, вы увидите такую ошибку:
Согласно документации Python, это исключение (ошибка выполнения):
Теперь, когда вы знаете, как создать файл, давайте посмотрим, как вы можете его изменить.
🔸 Как изменить файл
Чтобы изменить (записать) файл, вам нужно использовать метод write(). У вас есть два способа сделать это (добавить или написать) в зависимости от режима, который вы выбрали для его открытия. Давайте рассмотрим их подробно.
Добавить
"Добавление" означает добавление чего-либо в конец другого элемента. Режим "a" позволяет вам открыть файл, чтобы добавить к нему некоторое содержимое.
Например, если у нас есть этот файл:
И мы хотим добавить к нему новую строку, мы можем открыть ее, используя режим "a" (добавить), а затем вызвать метод write(), передав содержимое, которое мы хотим добавить, в качестве аргумента. р>
Это основной синтаксис для вызова метода write():
Вот пример:
💡 Совет: обратите внимание, что я добавляю \n перед строкой, чтобы указать, что я хочу, чтобы новая строка отображалась как отдельная строка, а не как продолжение существующей строки.
Это файл сейчас, после запуска скрипта:
💡 Совет: новая строка может не отображаться в файле, пока не запустится функция f.close().
Написать
Иногда может потребоваться удалить содержимое файла и полностью заменить его новым содержимым. Вы можете сделать это с помощью метода write(), если вы открываете файл в режиме "w".
Здесь у нас есть этот текстовый файл:
Если я запускаю этот скрипт:
Вот результат:
Как видите, открытие файла в режиме "w" и последующая запись в него заменяет существующее содержимое.
💡 Совет. Метод write() возвращает количество написанных символов.
Если вы хотите написать несколько строк одновременно, вы можете использовать метод writelines(), который принимает список строк. Каждая строка представляет собой строку, которую нужно добавить в файл.
Вот пример. Это исходный файл:
Если мы запустим этот скрипт:
Строки добавляются в конец файла:
Открыть файл для нескольких операций
Теперь вы знаете, как создавать, читать и записывать в файл, но что, если вы хотите сделать несколько вещей в одной программе? Давайте посмотрим, что произойдет, если мы попытаемся сделать это с помощью режимов, которые вы уже изучили:
Если вы открываете файл в режиме "r" (чтение), а затем пытаетесь в него записать:
Вы получите эту ошибку:
Аналогично, если вы открываете файл в режиме "w" (запись), а затем пытаетесь его прочитать:
Вы увидите эту ошибку:
То же самое произойдет с режимом "a" (добавление).
Как мы можем это решить? Чтобы иметь возможность прочитать файл и выполнить другую операцию в той же программе, нужно добавить к режиму символ "+", вот так:
Очень полезно, правда? Это, вероятно, то, что вы будете использовать в своих программах, но обязательно включите только те режимы, которые вам нужны, чтобы избежать потенциальных ошибок.
Иногда файлы больше не нужны. Давайте посмотрим, как вы можете удалять файлы с помощью Python.
🔹 Как удалить файлы
Чтобы удалить файл с помощью Python, необходимо импортировать модуль os, который содержит функции, взаимодействующие с вашей операционной системой.
💡 Совет. Модуль – это файл Python со связанными переменными, функциями и классами.
В частности, вам понадобится функция remove(). Эта функция принимает путь к файлу в качестве аргумента и автоматически удаляет файл.
Давайте рассмотрим пример. Мы хотим удалить файл с именем sample_file.txt .
Для этого пишем такой код:
- Первая строка: import os называется "оператором импорта".Этот оператор записывается в начале вашего файла и дает вам доступ к функциям, определенным в модуле os.
- Вторая строка: os.remove("sample_file.txt") удаляет указанный файл.
💡 Совет: вы можете использовать абсолютный или относительный путь.
Теперь, когда вы знаете, как удалять файлы, давайте рассмотрим интересный инструмент. Менеджеры контекста!
🔸 Познакомьтесь с контекстными менеджерами
Контекстные менеджеры — это конструкции Python, которые значительно упростят вашу жизнь. Используя их, вам не нужно помнить о закрытии файла в конце вашей программы, и у вас есть доступ к файлу в той части программы, которую вы выберете.
Синтаксис
Это пример диспетчера контекста, используемого для работы с файлами:
💡 Совет. Тело контекстного менеджера должно быть с отступом, точно так же, как мы делаем отступы для циклов, функций и классов. Если код не имеет отступа, он не будет считаться частью менеджера контекста.
После завершения тела менеджера контекста файл закрывается автоматически.
Пример
Вот пример:
Этот менеджер контекста открывает файл names.txt для операций чтения/записи и назначает этот файловый объект переменной f . Эта переменная используется в теле диспетчера контекста для ссылки на файловый объект.
Пытаюсь снова прочитать
После завершения тела файл автоматически закрывается, поэтому его нельзя прочитать, не открыв снова. Но ждать! У нас есть строка, которая пытается прочитать его снова, прямо здесь, внизу:
Посмотрим, что произойдет:
Эта ошибка возникает, потому что мы пытаемся прочитать закрытый файл. Потрясающе, правда? Всю тяжелую работу за нас делает менеджер контекста, он удобочитаем и лаконичен.
🔹 Как обрабатывать исключения при работе с файлами
При работе с файлами могут возникать ошибки. Иногда у вас может не быть необходимых разрешений для изменения или доступа к файлу, или файл может даже не существовать.
Как программист, вы должны предвидеть эти обстоятельства и учитывать их в своей программе, чтобы избежать внезапных сбоев, которые определенно могут повлиять на работу пользователя.
Давайте рассмотрим некоторые наиболее распространенные исключения (ошибки времени выполнения), которые могут возникнуть при работе с файлами:
ФайлНеНайденОшибка
Согласно документации Python, это исключение:
Например, если файл, который вы пытаетесь открыть, не существует в вашем текущем рабочем каталоге:
Вы увидите эту ошибку:
Давайте разберем эту ошибку построчно:
", строка 8, в . Эта строка сообщает вам, что ошибка возникла, когда код в файле, расположенном в
💡 Совет: Python очень подробно описывает сообщения об ошибках, верно? Это огромное преимущество в процессе отладки.
Ошибка разрешения
Это еще одно распространенное исключение при работе с файлами. Согласно документации Python, это исключение:
Возникает при попытке запустить операцию без соответствующих прав доступа, например разрешений файловой системы.
Это исключение возникает, когда вы пытаетесь прочитать или изменить файл, у которого нет прав доступа. Если вы попытаетесь это сделать, то увидите следующую ошибку:
IsADirectoryError
Согласно документации Python, это исключение:
Это конкретное исключение возникает, когда вы пытаетесь открыть или работать с каталогом, а не с файлом, поэтому будьте очень осторожны с путем, который вы передаете в качестве аргумента.
Как обрабатывать исключения
Для обработки этих исключений можно использовать оператор try/except. С помощью этого оператора вы можете «указать» своей программе, что делать в случае чего-то непредвиденного.
Это основной синтаксис:
Здесь вы можете увидеть пример с FileNotFoundError:
Это в основном говорит:
- Попробуйте открыть файл named.txt .
- Если выдается ошибка FileNotFoundError, не происходит сбой! Просто напечатайте описательное заявление для пользователя.
💡 Совет: вы можете выбрать, как поступить в данной ситуации, написав соответствующий код в блоке исключений. Возможно, вы могли бы создать новый файл, если он еще не существует.
Чтобы автоматически закрыть файл после выполнения задачи (независимо от того, было ли возбуждено исключение в блоке try или нет), вы можете добавить блок finally.
Это пример:
Существует много способов настроить оператор try/except/finally, и вы даже можете добавить блок else для запуска блока кода, только если в блоке try не возникало никаких исключений.
💡 Совет. Чтобы узнать больше об обработке исключений в Python, вы можете прочитать мою статью «Как обрабатывать исключения в Python: подробное визуальное введение».
🔸 Резюме
- С помощью Python можно создавать, читать, записывать и удалять файлы.
- Файловые объекты имеют собственный набор методов, которые вы можете использовать для работы с ними в своей программе.
- Менеджеры контекста помогают работать с файлами и управлять ими, автоматически закрывая их после завершения задачи.
- Обработка исключений является ключевым элементом Python. Общие исключения при работе с файлами включают FileNotFoundError , PermissionError и IsADirectoryError . Их можно обработать с помощью try/except/else/finally.
Я очень надеюсь, что моя статья вам понравилась и оказалась полезной. Теперь вы можете работать с файлами в своих проектах Python. Посмотрите мои онлайн-курсы. Следи за мной на Твиттере. ⭐️
Предложение SELECT, вероятно, является самой важной командой SQL. Он используется для возврата результатов из нашей базы данных (баз данных), и как бы просто это ни звучало, на самом деле это может быть очень сложно. В этой статье мы познакомим вас с оператором SELECT, а в следующих статьях мы расскажем о более сложных вещах.
Мотивация
В этой серии у нас было 4 статьи, в которых мы создали простую базу данных, заполнили ее некоторыми данными и объяснили, что такое первичные и внешние ключи. Вот предварительные условия, необходимые для того, чтобы начать «играть» с нашими данными:
В реальных ситуациях вы, вероятно, не будете вставлять все данные в базу данных. Данные должны быть вставлены вручную несколькими пользователями вашего приложения/системы или с помощью некоторых автоматизированных процессов. В этих случаях вы либо:
- Анализ данных, скорее всего, с помощью операторов SELECT
- Отслеживание производительности системы
- Внесите изменения в модель данных для поддержки новых функций.
Ну, я думаю, вы поняли, вы будете поддерживать работу системы и анализировать, что там хранится. Аналитическая часть, вероятно, круче, потому что вы сможете создавать отчеты и видеть, что было раньше, а если у вас достаточно данных и знаний статистики, вы сможете предсказывать будущее (насколько это возможно). Я с трудом могу себе представить какую-либо аналитику при работе с базами данных без написания оператора SELECT.
Инструкция SELECT — Синтаксис
Все команды SQL важны и необходимы, особенно эти 4 наиболее часто используемые — SELECT, INSERT, UPDATE, DELETE. Поэтому утверждение, что оператор SELECT является самым важным, неверно. Это так же важно, как и другие, но оно определенно используется чаще всего. Умение написать SELECT, чтобы получить именно то, что вы хотели, является очень желательным знанием в наши дни. Помимо написания оператора, возвращающего правильный результат, вы почти всегда должны (если вы пишете одноразовый запрос, и он занимает 2 секунды вместо 0,1 секунды, с этим можно смириться) всегда следить за тем, чтобы запрос написан оптимальным образом.
Инструкция SQL EXCEPT является одной из наиболее часто используемых инструкций для фильтрации записей, когда для выбора записей используются две инструкции SELECT.
Инструкция SQL EXCEPT возвращает те записи из левого запроса SELECT, которые отсутствуют в результатах, возвращаемых запросом SELECT в правой части инструкции EXCEPT.
Выражение SQL EXCEPT работает очень похоже на то, как работает оператор минус в математике.
Инструкция EXCEPT появилась в Microsoft SQL Server 2005.
В этой статье вы узнаете, как использовать SQL, КРОМЕ, на нескольких простых примерах.
Условия выполнения инструкции SQL EXCEPT
Есть несколько условий, которые должны быть выполнены, прежде чем вы сможете использовать оператор EXCEPT в SQL Server:
- Количество столбцов и порядков в таблицах, которые используются для выполнения инструкций SELECT, должны быть одинаковыми
- Типы данных соответствующих столбцов обеих таблиц, участвующих в соответствующих запросах SELECT, должны быть либо одинаковыми, либо совместимыми
Создание фиктивного набора данных
Давайте создадим фиктивный набор данных, который мы будем использовать для выполнения примера операторов SQL EXCEPT, если только вы не используете полностью резервную копию базы данных SQL.
Запустите следующий скрипт:
В приведенном выше скрипте мы создаем фиктивную базу данных с именем BookStore. База данных содержит две таблицы: Books1 и Books2.
Обе таблицы содержат 4 столбца: идентификатор, название, категория и цена.
Теперь давайте вставим несколько фиктивных записей в обе таблицы.
Запустите следующий скрипт:
Приведенный выше скрипт вставляет 10 записей в таблицу Books1 и 10 записей в таблицу Books2.
Важно отметить, что последние 5 записей в таблице Books1 и первые 5 записей в таблице Books2 совпадают.
Теперь посмотрим, как мы можем использовать оператор SQL EXCEPT для этих данных.
Фильтрация записей с помощью инструкции SQL EXCEPT
Давайте рассмотрим синтаксис использования инструкции SQL EXCEPT:
Да, выполнить инструкцию EXCEPT очень просто.
Далее мы воспользуемся оператором SQL EXCEPT для выбора записей из таблицы Books1, которых нет в таблице Books2. Вы можете видеть, что записи с идентификаторами от 6 до 10 одинаковы в обеих таблицах.
Таким образом, если таблица Book1 находится слева от оператора EXCEPT, а таблица Books2 — справа, записи с идентификаторами от 1 до 5 будут выбраны из таблицы Books1.
Чтобы попробовать, запустите следующий скрипт:
Вот результат работы приведенного выше скрипта:
Вы видите, что из таблицы Books1 были выбраны только записи с идентификаторами от 1 до 5, поскольку записи с идентификаторами от 6 до 10 также существуют в таблице Books2.
Аналогично, если таблица Books2 находится слева от инструкции SQL EXCEPT, а таблица Books1 — справа, вы увидите записи из таблицы Books2, отсутствующие в таблице Books1.
Выполните следующий скрипт, чтобы увидеть это в действии:
Вот результат:
Вы видите, что были выбраны только записи с идентификаторами от 11 до 15, поскольку записи с идентификаторами 6–10 из таблицы Books2 также существуют в таблице Books1.
Использование операторов EXCEPT в одной таблице
Помимо использования оператора SQL EXCEPT для фильтрации записей из двух таблиц, оператор EXCEPT также можно использовать для фильтрации записей из одной таблицы. Например, следующий оператор EXCEPT вернет все записи из таблицы Books1, где цена меньше или равна 5000:
В приведенном выше сценарии у нас есть две инструкции SELECT, работающие с одной таблицей, т. е. с Books1.
Инструкция SELECT в правой части инструкции EXCEPT выбирает все записи, в которых цена превышает 5000. Оператор SELECT в левой части инструкции EXCEPT возвращает все записи из таблицы Books1. р>
Затем оператор EXCEPT отфильтровывает записи, выбранные оператором SELECT справа, из записей, возвращенных оператором SELECT слева. Следовательно, у нас остались только записи из таблицы Books, где цена не превышает 5000.
Вот результат запроса выше:
ЗА ИСКЛЮЧЕНИЕМ vs NOT NULL
Теперь, когда вы знаете, как работает оператор EXCEPT, важно понять разницу между оператором SQL EXCEPT и оператором NOT IN. Есть два основных отличия:
- Инструкция EXCEPT возвращает только отдельные записи, тогда как инструкция NOT IN возвращает все записи, не отфильтрованные оператором NOT IN.
- В операторе EXCEPT сравнение двух операторов SELECT основано на всех столбцах в обеих таблицах. В то время как оператор NOT IN сравнивает значения из одного столбца
Вот пример использования оператора NOT IN для фильтрации всех записей из таблицы Books1, которые также существуют в таблице Books2:
Читайте также: