Было время, когда С++ не хватало динамизма, и увлечься этим языком было трудно. Но всё изменилось, когда было принято решение развить стандарт C++. С 2011 года язык стал более динамичным и постоянно развивается. В статье мы рассмотрим некоторые интересные функциональные возможности языка.
Когда в 11 версии C++ только появилось auto
, жизнь стала намного легче.
Идея auto
состояла в том, чтобы заставить компилятор C++ определять тип ваших данных во время компиляции, вместо того чтобы заставлять вас каждый раз объявлять тип. Это было удобно, если у вас были типы данных вроде map<string, vector <pair <int, int>>>
?
auto an_int = 26; // при компиляции тип выводится в int
auto a_bool = false; // в bool
auto a_float = 26.04f; // в float
auto ptr = &a_float; // и даже в указатель
auto data; // а можно ли так? Вообще-то нельзя.
Посмотрите на строку номер 5. Вы не можете объявить что-либо без инициализатора. Строка 5 не сообщает компилятору, каким может быть тип данных.
Изначально auto было несколько ограничено. Затем, в более поздних версиях языка, у него появилось больше возможностей.
В строках 7 и 8 была использована инициализация в скобках. Эта функция также была добавлена в 11 версии C++.
Не забывайте, что в случае использования auto у компилятора должен быть способ определить ваш тип.
Теперь встаёт хороший вопрос, что произойдёт, если мы напишем auto a = {1, 2, 3}? Это ошибка компиляции? Это вектор?
На самом деле, в 11 версии C++ был представлен std::initializer_list<type>. Инициализированный список в скобках будет считаться легковесным контейнером, если объявлен как auto.
И как упоминалось ранее, определять типы объектов компилятором полезно, когда у вас есть сложные структуры данных:
Не забудьте проверить строку 25! Выражение auto [v1, v2] = itr.second
— новая функция в 17 версии C++. Это называется структурным связыванием. В предыдущих версиях приходилось извлекать каждую переменную отдельно. Но структурное связывание сделало этот процесс более удобным.
Более того, если вы хотите получить данные, используя ссылку, то просто добавьте символ — auto &[v1, v2] = itr.second
.
В 11 версии C++ появились лямбда-выражения. Это что-то вроде анонимных функций в JavaScript. Они являются безымянными функциональными объектами и захватывают переменные в различных областях на основе некоторого краткого синтаксиса. Они также могут быть присвоены переменным.
Лямбды будут полезны, если вам нужно сделать в коде быстрое и небольшое изменение, и вы не хотите писать для этого отдельную функцию. Другое довольно распространённое использование функции — сравнение.
std::vector<std::pair::<int, int>> data = {{1, 3}, {7, 6}, {12, 4}}; // обратите внимание на скобочную инициализацию
std::sort(begin(data), end(data), [ ](auto a, auto b) { // auto!
return a.second < b.second;
});
Приведённый выше пример может многое сказать.
Во-первых, обратите внимание, как фигурные скобки упрощают вам жизнь. Затем следуют универсальные begin()
, end()
, которые тоже были добавлены в 11 версии. После идёт лямбда-выражение в качестве компаратора ваших данных. Параметры лямбда-выражения объявлены с помощью auto
, что было добавлено в 14 версии С++. До этого auto
нельзя было использовать в качестве параметров функции.
Обратите внимание, мы начинаем лямбда-выражение с квадратных скобок [ ]
. Они определяют область действия лямбды — сколько у неё полномочий над локальными переменными и объектами.
Как определено в этом потрясающем репозитории по современному C++:
[ ]
— ничего не захватывает. Таким образом, вы не можете использовать любую локальную переменную внешней области видимости в лямбда-выражении. Вы можете использовать только параметры.[=]
— захватывает локальные объекты (локальные переменные, параметры) в области видимости по значению. Вы можете использовать, но не изменять их.[&]
— захватывает локальные объекты (локальные переменные, параметры) в области видимости по ссылке. Вы можете изменить их, как в примере, приведённом ниже.[this]
— захватывает этот указатель по значению.[a, &b]
— захватывает объект a
по значению, объект b
по ссылке.Так что, если внутри лямбда-функции вы хотите преобразовать данные в какой-то другой формат, вы можете применить её, воспользовавшись преимуществами области видимости. Например:
В приведённом выше примере, если вы захватили локальные переменные по значению ([factor]
) в лямбда-выражении, то вы не можете изменить factor
в 5 строке. Вы просто не имеете права делать это. Не злоупотребляйте своими правами!
Наконец, обратите внимание, что мы берём переменную val
в качестве ссылки. Это гарантирует, что любое изменение внутри лямбда-функции фактически изменяет vector
.
Вам точно понравится эта возможность в С++ 17.
if
или switch
. Это поможет сделать код лаконичным и чистым. Общая форма:Скажем, у вас есть какое-то выражение для оценки, и его значение не изменится после инициализации. Вы можете предварительно рассчитать значение, а затем использовать его в качестве макроса. Или, как предложил C++ 11, можно использовать constexpr
.
Программисты стремятся максимально сократить время выполнения программ. Поэтому если некоторые операции можно отдать на выполнение компилятору, это стоит сделать.
Приведённый выше код — распространённый пример использования constexpr
.
Поскольку мы объявили функцию вычисления Фибоначчи как constexpr
, компилятор может предварительно вычислить fib(20)
во время компиляции. Так что после неё он может заменить строку с
const long long bigval = fib (20);
на
const long long bigval = 2432902008176640000;
Обратите внимание, что переданный аргумент является константным значением. Важный момент: в функциях, объявленных constexpr
, передаваемые аргументы также должны быть constexpr
или const
. В противном случае они будут вести себя как обычные функции, и во время компиляции предварительный расчёт выполняться не будет.
Переменные также могут быть constexpr
. В этом случае, как вы можете догадаться, эти переменные должны вычисляться во время компиляции. Иначе вы получите ошибку компиляции.
Интересно, что позже в C++ 17 были представлены constexpr-if
и constexpr-lambda
.
Как и пара, кортеж представляет собой набор значений фиксированного размера для различных типов данных.
auto user_info = std::make_tuple("M", "Chowdhury", 25); // используем auto, чтобы уменьшить описание типов
// чтобы получить доступ к данным
std::get<0>(user_info);
std::get<1>(user_info);
std::get<2>(user_info);
// в 11 версии С++ мы использовали tie, чтобы сделать связывание
std::string first_name, last_name, age;
std::tie(first_name, last_name, age) = user_info;
// но в 17 версии стало гораздо удобнее
auto [first_name, last_name, age] = user_info;
Иногда удобнее использовать std::array
вместо кортежа. Такой массив подобен обычному массиву в C вместе с несколькими функциями стандартной библиотеки C++. Эта структура данных была добавлена в 11 версии C++.
Очень подробное название для функции. Идея состоит в том, что с 17 версии типы шаблонных параметров будут выводиться и для стандартных шаблонных классов. Ранее это поддерживалось только для функций.
std::pair<std::string, int> user = {"M", 25}; // раньше
std::pair user = {"M", 25}; // C++ 17
В этом примере для первого элемента кортежа будет выведен тип const char *
, а не std::string
.
Выводимый тип задаётся неявно. Это становится ещё удобнее для кортежей.
// раньше
std::tuple<std::string, std::string, int> user ("M", "Chy", 25);
// C++ 17
std::tuple user2("M", "Chy", 25);
Эта функция не имеет никакого смысла, если вы слабо знакомы с шаблонами в C++.
Указатели могут быть адскими.
Из-за свободы, которую предоставляют такие языки, как C++, иногда становится очень легко выстрелить себе в ногу. И во многих случаях именно указатели ответственны за вред, нанесённый компьютеру.
К счастью, в C++11 появились умные указатели, которые намного удобнее, чем простые. Они помогают программистам предотвращать утечки памяти, освобождая её, когда это возможно. Они также обеспечивают исключительную безопасность.
Источник: tproger.ru
HTML (HyperText Markup Language) — это язык разметки, который используется для создания веб-страниц. Его история начинается в конце 1980-х годов...
Тим Бернерс-Ли, британский ученый, работавший в Европейском центре ядерных исследований (CERN), задумался о способе обмена научной информацией между исследователями.
В то время существовало множество различных систем для обмена данными, но они не были совместимы друг с другом. Это создавало сложности в обмене информацией и замедляло научный прогресс.
Тим Бернерс-Ли предложил создать единый язык разметки, который позволил бы связывать документы через гипертекстовые ссылки. Так появился HTML, который стал основой для Всемирной паутины (World Wide Web). HTML позволил создавать документы, которые могли быть легко доступны и читаемы на любом компьютере, независимо от операционной системы и программного обеспечения. Это был революционный шаг, который открыл новые горизонты для обмена информацией и взаимодействия между людьми по всему миру.
HTML стал первым шагом к созданию глобальной информационной сети, которая сегодня известна как интернет. Он позволил ученым и исследователям легко делиться своими открытиями и результатами исследований, что значительно ускорило научный прогресс. Впоследствии HTML стал основой для создания коммерческих веб-сайтов, что привело к бурному развитию электронной коммерции и изменило способ ведения бизнеса.
Первая версия HTML, известная как HTML 1.0, была выпущена в 1993 году. Она содержала базовый набор тегов, которые позволяли создавать простые веб-страницы. Основные элементы включали заголовки, абзацы, списки и гиперссылки. Вот пример простой HTML-страницы на основе HTML 1.0:
<!DOCTYPE html>
<html>
<head>
<title>Пример HTML 1.0</title>
</head>
<body>
<h1>Заголовок 1 уровня</h1>
<p>Это абзац текста.</p>
<a href="https://example.com">Пример ссылки</a>
</body>
</html>
HTML 1.0 был простым и ограниченным, но он заложил основу для дальнейшего развития веб-технологий. В то время веб-страницы были статичными, и возможности для интерактивности были минимальными. Однако HTML 1.0 открыл двери для создания первых веб-сайтов и положил начало эре интернета. Веб-разработчики начали экспериментировать с новыми возможностями, что привело к появлению первых коммерческих веб-сайтов и онлайн-сервисов.
HTML 1.0 также сыграл важную роль в стандартизации веб-технологий. Он установил основные правила и принципы, которые до сих пор используются в веб-разработке. Это позволило разработчикам создавать веб-страницы, которые были совместимы с различными браузерами и платформами, что значительно упростило процесс разработки и поддержки веб-сайтов.
С развитием интернета и увеличением числа пользователей возникла необходимость в более мощных и гибких инструментах для создания веб-страниц. Это привело к появлению новых версий HTML, каждая из которых добавляла новые возможности и улучшения.
HTML 2.0 был выпущен в 1995 году и включал в себя все элементы HTML 1.0, а также добавил новые возможности, такие как формы для ввода данных и таблицы для структурирования информации. Это сделало веб-страницы более интерактивными и удобными для пользователей. Формы позволили создавать интерактивные элементы, такие как поля ввода, кнопки и выпадающие списки, что значительно расширило возможности взаимодействия с пользователями.
HTML 2.0 также включал улучшенную поддержку гипертекстовых ссылок, что позволило создавать более сложные и взаимосвязанные веб-страницы. Это способствовало развитию гипертекстовых систем и улучшило навигацию по веб-сайтам. Веб-разработчики начали использовать HTML 2.0 для создания более сложных и функциональных веб-сайтов, что привело к росту популярности интернета.
HTML 3.2, выпущенный в 1997 году, добавил поддержку стилей (CSS) и скриптов (JavaScript), что позволило создавать более сложные и динамичные веб-страницы. Это была важная веха в развитии веб-дизайна, так как разработчики получили возможность контролировать внешний вид и поведение веб-страниц. CSS позволил отделить структуру документа от его стиля, что упростило разработку и поддержку веб-сайтов.
JavaScript, в свою очередь, позволил добавлять интерактивные элементы и динамическое поведение на веб-страницы. Это открыло новые возможности для создания интерактивных веб-приложений и улучшило пользовательский опыт. Веб-разработчики начали активно использовать CSS и JavaScript для создания более привлекательных и функциональных веб-сайтов, что привело к появлению новых профессий, таких как веб-дизайнеры и фронтенд-разработчики.
HTML 4.01, выпущенный в 1999 году, стал стандартом для веб-разработки на многие годы. Он включал в себя улучшенную поддержку стилей и скриптов, а также новые элементы и атрибуты для создания более семантически правильных и доступных веб-страниц. Вот пример использования таблицы в HTML 4.01:
<!DOCTYPE html>
<html>
<head>
<title>Пример таблицы</title>
</head>
<body>
<table border="1">
<tr>
<th>Имя</th>
<th>Возраст</th>
</tr>
<tr>
<td>Иван</td>
<td>25</td>
</tr>
<tr>
<td>Мария</td>
<td>30</td>
</tr>
</table>
</body>
</html>
HTML 4.01 также ввел концепцию разделения структуры и стиля, что способствовало лучшей организации кода и облегчило поддержку веб-страниц. Это позволило разработчикам создавать более сложные и масштабируемые веб-приложения, которые были легче поддерживать и обновлять. HTML 4.01 стал основой для многих современных веб-технологий и стандартов, которые используются до сих пор.
HTML 4.01 также включал улучшенную поддержку мультимедиа, что позволило добавлять на веб-страницы изображения, аудио и видео. Это значительно расширило возможности веб-дизайна и улучшило пользовательский опыт. Веб-разработчики начали активно использовать мультимедийные элементы для создания более привлекательных и информативных веб-сайтов.
HTML5, выпущенный в 2014 году, стал настоящей революцией в мире веб-разработки. Он был разработан с учетом потребностей современных веб-приложений и включал множество новых возможностей и улучшений.
HTML5 ввел новые семантические элементы, такие как <header>
, <footer>
, <article>
, <section>
, которые позволяют лучше структурировать контент и делают его более доступным для поисковых систем и вспомогательных технологий. Эти элементы помогают улучшить SEO (поисковую оптимизацию) и делают веб-страницы более понятными для поисковых систем.
Семантические элементы также улучшают доступность веб-страниц для людей с ограниченными возможностями. Они помогают вспомогательным технологиям, таким как экранные читалки, лучше понимать структуру и содержание веб-страницы, что делает интернет более доступным для всех пользователей.
HTML5 добавил поддержку встроенных мультимедийных элементов, таких как <audio>
и <video>
, что позволило воспроизводить аудио и видео непосредственно на веб-страницах без необходимости использования сторонних плагинов. Вот пример использования видео в HTML5:
<!DOCTYPE html>
<html>
<head>
<title>Пример видео</title>
</head>
<body>
<video controls>
<source src="video.mp4" type="video/mp4">
Ваш браузер не поддерживает видео.
</video>
</body>
</html>
Это значительно упростило процесс добавления мультимедийного контента на веб-страницы и улучшило пользовательский опыт. Веб-разработчики начали активно использовать встроенные мультимедийные элементы для создания более интерактивных и привлекательных веб-сайтов.
HTML5 также улучшил поддержку форм, добавив новые типы ввода, такие как email
, date
, number
, и новые атрибуты, такие как placeholder
и required
, что упростило создание и валидацию форм. Это значительно упростило процесс взаимодействия пользователей с веб-сайтами и улучшило пользовательский опыт.
Новые типы ввода и атрибуты позволили разработчикам создавать более удобные и интуитивно понятные формы, что повысило эффективность взаимодействия с пользователями. Веб-разработчики начали активно использовать новые возможности HTML5 для создания более функциональных и удобных веб-приложений.
HTML5 включил множество новых API, таких как Geolocation API, Web Storage API, Canvas API, которые расширили возможности веб-приложений и позволили создавать более интерактивные и функциональные веб-сайты. Эти API предоставили разработчикам доступ к новым функциям и возможностям, что значительно расширило возможности веб-разработки.
Geolocation API позволяет определять местоположение пользователя, что открыло новые возможности для создания геолокационных сервисов и приложений. Web Storage API предоставляет возможность хранения данных на стороне клиента, что улучшило производительность и удобство использования веб-приложений. Canvas API позволяет создавать сложные графические элементы и анимации, что значительно улучшило визуальное восприятие веб-сайтов.
Сегодня HTML продолжает развиваться и адаптироваться к новым требованиям и технологиям. Современные веб-страницы становятся все более интерактивными и сложными, и HTML играет ключевую роль в этом процессе. Веб-разработчики активно используют HTML5 вместе с CSS3 и JavaScript для создания современных веб-приложений.
Среди текущих трендов можно выделить развитие прогрессивных веб-приложений (PWA), которые объединяют лучшие черты веб-сайтов и мобильных приложений. PWA позволяют создавать веб-приложения, которые работают офлайн, быстро загружаются и предоставляют пользователям удобный и интуитивно понятный интерфейс.
Также активно развивается направление веб-компонентов, которое позволяет создавать переиспользуемые элементы интерфейса. Веб-компоненты позволяют разработчикам создавать модульные и масштабируемые веб-приложения, что значительно упрощает процесс разработки и поддержки.
HTML продолжит эволюционировать, чтобы соответствовать требованиям времени. В будущем можно ожидать появления новых семантических элементов, улучшенной поддержки мультимедиа и новых API, которые сделают веб-приложения еще более мощными и удобными. Веб-разработчики будут продолжать использовать HTML в сочетании с другими веб-технологиями для создания инновационных и функциональных веб-приложений.
HTML прошел долгий путь от простого языка разметки до мощного инструмента для создания современных веб-приложений. Его история — это история развития интернета и веб-технологий, и она продолжается. Веб-разработчики по всему миру продолжают использовать HTML для создания новых и инновационных веб-приложений, которые улучшают пользовательский опыт и делают интернет более доступным и функциональным.
Источник: https://sky.pro
Для привлечения внимания пользователей к сайту разработчики используют различные графические элементы. Одним из таких элементов является favicon. В статье рассказывается, что такое favicon, зачем он нужен сайту и как его оптимизировать. Даётся подробная инструкция, как его создать и добавить на сайт с помощью HTML-кода.
Favicon — это графический элемент, который является иконкой сайта и находится на вкладке веб-ресурса. Правильно настроенный favicon помогает пользователям легче находить сайт среди множества открытых вкладок и закладок.
Хорошо продуманный фавикон помогает создать запоминающийся образ бренда, что особенно важно в условиях конкурентной среды.
Favicon выполняет несколько ключевых функций:
Фавикон различных сайтов видно в окне браузера на вкладках:
Иконка сайта может иметь разный формат, что главным образом влияет на её отображение:
Создать значок сайта можно с помощью множества доступных онлайн-инструментов.
Первый шаг — выбрать или сгенерировать изображение. Например, подойдёт логотип вашей компании, символ или другой элемент, который точно передаёт суть вашего бизнеса. Рекомендуемые размеры для фавиконов — 16x16 пикселей для стандартного отображения на вкладках браузеров и 32x32 пикселя для более качественного отображения на устройствах с высоким разрешением. Помните, что изображение должно быть чётким и легко различимым.
После того как вы выбрали изображение, следующим шагом является его преобразование в один из форматов, наиболее подходящих для фавиконов. Для конвертации используйте онлайн-конвертеры, например, CloudConvert или ConvertICO.
Убедитесь, что размер файла фавикона не превышает 100 КБ. Чем меньше весит иконка, тем быстрее она будет загружаться на сайте, что особенно важно для мобильных устройств. Сжимайте изображения при помощи инструментов, например, TinyPNG или ImageOptim, чтобы уменьшить вес файла без значительной потери качества.
Для более быстрой разработки фавикона можно воспользоваться сервисами:
Этот инструмент позволяет загружать собственные изображения или создавать текстовые иконки, выбирая шрифты, цвета и фон.
Это онлайн-редактор, в котором можно создавать и редактировать значки непосредственно в браузере. Здесь вы сможете нарисовать иконку пиксель за пикселем или загрузить готовое изображение, а затем настроить его.
Этот сервис генерирует полный набор иконок для всех устройств и платформ, включая Android и iOS. Он предоставляет подробные инструкции по добавлению сгенерированных файлов на ваш сайт, что упрощает процесс интеграции.
Теперь, когда у вас есть готовая иконка, необходимо добавить её на интернет-страницу. Это делается с помощью тега <link>, который помещается в секцию <head> вашего HTML-документа.
Пример HTML-кода для добавления favicon:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<title>Мой сайт</title>
</head>
<body>
<h1>Добро пожаловать на мой сайт!</h1>
</body>
</html>
В этом примере favicon.ico — это имя вашего файла с иконкой. Убедитесь, что файл находится в той же папке, что и ваш HTML-документ. Если вы используете другие форматы, замените
type="image/x-icon"
на соответствующий тип, например,
type="image/png"
для PNG.
Для лучшей поддержки различных устройств и браузеров вы можете указать разные размеры иконок, используя атрибуты sizes и type.
Пример:
<link rel="icon" href="favicon-16x16.png" sizes="16x16" type="image/png">
<link rel="icon" href="favicon-32x32.png" sizes="32x32" type="image/png">
<link rel="icon" href="favicon-96x96.png" sizes="96x96" type="image/png">
Браузеры будут выбирать наиболее подходящую иконку в зависимости от устройства и разрешения экрана.
Мобильные устройства требуют особого подхода к иконкам. Используйте следующие метатеги в секции <head>, чтобы иконки корректно отображались в телефонах:
<link rel="apple-touch-icon" sizes="180x180" href="apple-icon.png">
<link rel="icon" type="image/png" sizes="192x192" href="android-icon.png">
<link rel="icon" type="image/png" sizes="512x512" href="android-icon.png">
После добавления значка на ваш сайт важно тщательно протестировать его отображение в различных браузерах и на разных устройствах.
Проверьте, как ваш значок выглядит в популярных браузерах, таких как «Яндекс Браузер», Google Chrome, Mozilla Firefox, Safari и Microsoft Edge. Каждый из них может обрабатывать фавиконы немного по-разному. Например, Chrome может кешировать старое изображение, если вы вносите изменения, поэтому лучше открыть сайт в режиме инкогнито или очистить кеш браузера, чтобы увидеть обновлённый значок.
Не забудьте протестировать favicon и на мобильных устройствах. На смартфонах и планшетах значок может отображаться иначе, особенно в зависимости от операционной системы (iOS или Android). Проверьте, как смотрится и отображается иконка на разных экранах, включая устройства с высокой плотностью пикселей (Retina).
Если ваша иконка не отображается, на то может быть несколько причин. Разберём основные причины ошибок и предложим их решение.
Вы должны проверить, правильно ли вы указали расположение файла в HTML-коде. Например, если ваш файл называется favicon.ico и находится в папке images, путь должен выглядеть так:
<link rel="icon" href="images/favicon.ico" type="image/x-icon">
Если файл находится в корневой директории вашего веб-ресурса, путь будет:
href="favicon.ico"
Проверьте, не допущена ли опечатка в названии файла и его расширении. Также убедитесь, что файл действительно существует на сервере, иначе иконка не будет отображаться.
Если ваш значок не отображается или выглядит неправильно, возможно, проблема в кеше браузера. Очистив кеш, обновите страницу вашего сайта и проверьте, отображается ли новый фавикон.
Также стоит убедиться, что файл иконки имеет правильный формат и тип MIME. Подробнее о форматах иконок мы рассказывали выше.
Чтобы проверить тип MIME, вы можете использовать инструменты разработчика в вашем браузере. Откройте вкладку «Сеть» и обновите страницу, затем найдите ваш файл иконки в списке ресурсов. Убедитесь, что указанный тип MIME соответствует формату файла, например, image/x-icon для .ico и image/png для .png.
Используя описанные выше методы, вы сможете без труда интегрировать иконку на свой сайт.
Источник: adminvps.ru
С помощью парсинга можно быстро и эффективно собирать информацию с веб-сайтов. В этой статье разберемся, как работает этот процесс, рассмотрим полезные библиотеки и инструменты и научимся парсить сайты на Python.
Парсинг (англ. parsing — разбор) — это процесс автоматического анализа веб-сайтов для сбора структурированной информации. Еще парсинг часто называют веб-скрапингом. Представьте, что вы ищете на новостном сайте статьи про Python и сохраняете каждую в заметки: копируете заголовок и ссылку. С помощью парсинга можно автоматизировать этот процесс. Все данные будет искать и сохранять скрипт, а вам останется только проверять файл с результатами.
Часто парсинг используют боты, которые потом предоставляют доступ к собранным структурированным данным. Это может быть список статей на сайте, вакансий на платформе по поиску работы или предложений на досках объявлений. Например, один из героев нашего блога написал бот, который нашел ему работу за месяц. Если у сайта нет полноценного открытого API, то парсер ищет данные с помощью GET-запросов к серверу, а это создает дополнительную нагрузку на сервер.
Это накладывает некоторые этические ограничения на скрипты для парсинга веб-сайтов:
Надо быть готовым к тому, что некоторые владельцы веб-сайтов ограничивают парсинг и пытаются с ним бороться. В этих случаях приходится смириться с политикой сервиса или использовать более продвинутых ботов, которые имитируют поведение пользователя и получают доступ к странице через собственный экземпляр браузера. Этот способ сложнее, чем отправка запроса на сервер, но надежнее.
С помощью парсинга можно быстро собрать сразу много данных, а не тратить время на ручное исследование веб-сайтов. В некоторых задачах именно время является ключевым фактором для перехода к автоматизации. Вот сферы, в которых обычно применяют веб-парсинг:
Для парсинга удобно использовать Python из-за его простого синтаксиса и интерпретируемого подхода. Скрипты можно писать быстро и не собирать весь проект снова после незначительных изменений в коде. Разработанный парсер можно без проблем перенести практически на любую платформу или запустить в облаке, автоматизировав процесс хранения информации.
Еще одно преимущество Python — его популярность. Для языка программирования есть большое количество сторонних библиотек для различных задач и активное сообщество, которое может помочь советом. Одна из полезных библиотек для парсинга веб-сайтов — BeautifulSoup. С ее помощью можно легко анализировать HTML-файлы и находить в них нужные данные. В этой статье будем парсить сайт с ее помощью.
Есть несколько популярных способов запуска кода на Python:
Для работы нам понадобятся библиотеки BeautifulSoup, requests и lxml. Их можно установить с помощью следующей команды в терминале:
Для начала парсинга надо получить страницу, из которой будем вытаскивать полезные данные. Для этого будем использовать библиотеку requests, чтобы отправить GET-запрос, в качестве ответа получить код страницы и сохранить его. Попробуем распарсить вот эту статью, получив заголовок и первый абзац. Код выглядит следующим образом:
Что в коде:
В ответе мы получим весь код страницы, включая CSS-стили и JavaScript. Вот так это выглядит:
Код страницы у нас уже есть, но теперь из него надо получить полезные данные. Обозначим, что для решения нашей задачи необходимо получить заголовок статьи и первый абзац. Для этого понадобятся возможности библиотеки BeautifulSoup. Но сперва надо найти теги элементов, которые будем извлекать из кода страницы.
Для этого потребуется веб-инспектор в любом браузере. Мы будем использовать Safari, но этот режим есть и в других браузерах. К примеру, в Google Chrome он открывается сочетанием клавиш Сtrl + Shift + I (Windows) или ⌥ + ⌘ + I (macOS). После этого можно выбрать на странице элемент и увидеть его код в инспекторе.
Заголовок статьи находится в теге <h1>, поэтому попробуем получить его содержимое с помощью библиотеки BeautifulSoup. Для этого передадим в функцию find искомый тег:
Все получилось и Python вывел в консоль текст заголовка, но с тегами. Надо избавиться от них. Это можно сделать с помощью преобразования содержимого переменной title в текст. После этого Python удалит теги, оставив только их содержимое:
Теперь надо повторить весь порядок действий для вывода первого абзаца. Начинаем с поиска тега в инспекторе и после этого вытаскиваем его из файла и преобразуем в текст.
Мы в точности повторили весь порядок действий, но парсер вывел совсем не ту строчку. Все дело в том, что мы искали элемент по тегу <p>. В HTML-файле их может быть несколько, а BeautifulSoup ищет самый первый. Поэтому запрос надо уточнить и сделать его более конкретным.
Для этого можно указать дерево наследования элементов. К примеру, если тег <p> входит в <article>, а тот — в <main>, то код запроса можно будет записать так: soup.find(‘main’).find(‘article’).find(‘p’). Еще можно искать элемент по его классу. Для этого в функцию надо передать тег и его класс: soup.find(‘p’, class_=’paragraph’).
В нашем случае запрос будет выглядеть следующим образом:
Таким образом можно распарсить любую веб-страницу и получить необходимые данные, а потом использовать их по своему усмотрению. К примеру, строить график изменения цен на товары в онлайн-магазинах или автоматически отправлять ссылки на новые статьи с кратким содержанием в Telegram.
Сейчас наш код выводит результат парсинга веб-страницы в консоль. Эти данные никуда не сохраняются и к ним сложно получить доступ. Для этого каждый раз надо будет запускать скрипт. Упростим задачу и запишем данные в файл.
Для этого воспользуемся встроенной функцией write(). Сперва откроем файл в режиме записи:
Если файла с таким названием нет, то Python сам создаст его в директории проекта.
После этого запишем данные, полученные во время парсинга, и обязательно закроем файл:
Источник: blog.skillfactory.ru
Изучите преимущества и особенности языка C#. История, недостатки и преимущества Си Шарп в одном месте. Узнайте всё о языке программирования C sharp
C# — молодой, но широко используемый язык программирования, относящийся к Си-семейству. В данной статье мы рассмотрим его особенности, преимущества и недостатки, а также области применения, чтобы помочь разработчикам определить, насколько он подходит их потребностям.
Вы только начинаете свой путь в программировании и ещё не определились с выбором первого языка? Или, возможно, вы уже освоили некоторые навыки и сейчас решаете, как продолжить развитие? В таком случае вы наверняка слышали о языке программирования C#, который часто называют «Си-шарп». В данной статье мы предоставим вам всю необходимую информацию, чтобы вы смогли оценить, насколько этот язык подходит именно вам.
А что же означает само название C#? В термине C Sharp слово «шарп» имеет свою символическую значимость. Знак «#» (читается как «диез» в музыкальной нотации) означает повышение звуковой высоты на полтона. С другой стороны, название «C#» происходит от «эволюционной цепочки» C → C++ → C++++(C#), где символ «#» составлен из четырёх знаков «+».
История развития C# началась в 1993-2001 годах, когда группа инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота разработала его как язык программирования для создания приложений на платформе Microsoft.
В 2000 году Microsoft представила промышленные версии новых технологий и решений для обмена сообщениями и данными, а также для разработки интернет-приложений. Была запущена платформа .NET, которая объединила несколько языков программирования, что было новинкой для того времени.
Одним из ключевых нововведений платформы .NET была технология ASP.NET (Active Server Pages), предназначенная для создания серверных веб-приложений с возможностью взаимодействия с базами данных. Специально для ASP.NET был разработан язык программирования C#, который стал основным языком разработки на этой платформе. Более того, сама технология ASP.NET была полностью написана на C#.
C# имеет синтаксис, похожий на C, и в этом отношении он близок к C++ и Java. В качестве объектно-ориентированного языка C# унаследовал многое от Java и C++. Как и Java, C# изначально был разработан для веб-приложений, и около 75% его синтаксических возможностей схожи с Java. C# также называют «очищенной версией Java». Еще 10% возможностей он заимствовал у C++, а 5% — у Visual Basic. Оставшиеся 10% — это уникальные идеи разработчиков. Благодаря объектно-ориентированному подходу C# позволяет создавать крупные, но гибкие, масштабируемые и расширяемые приложения.
Си Шарп давно уже поддерживает множество полезных функций, таких как:
При этом язык все еще активно развивается, и с каждой новой версией появляются новые интересные возможности, такие как лямбда-выражения, динамическое связывание, асинхронные методы и другие.
В сравнении с другими языками, C# относительно молод, но уже прошел долгий путь. Первая версия языка была выпущена вместе с Microsoft Visual Studio .NET в феврале 2002 года. На текущий момент последняя версия — C# 8.0, которая была выпущена в сентябре 2019 года вместе с .NET Core 3.0.
Когда говорят о C#, часто имеют в виду технологии, предоставляемые платформой .NET, такие как Windows Forms, WPF, ASP.NET и Xamarin. И наоборот, при упоминании .NET часто подразумевают C#. Однако, хотя эти понятия связаны, они не должны быть тождественными. C# был специально создан для работы с фреймворком .NET, но сама платформа .NET имеет более широкий контекст.
Билл Гейтс однажды заявил, что .NET — это лучшее, что создала компания Microsoft, и у него есть весомые основания для такого мнения. Фреймворк .NET представляет собой мощную платформу для разработки приложений. Вот несколько ключевых особенностей:
Таким образом, платформа .NET играет важную роль в разработке на C#. Когда говорят о C#, часто имеют в виду технологии, такие как Windows Forms, WPF, ASP.NET и Xamarin, предоставляемые платформой .NET. В то же время платформа .NET включает в себя гораздо больше, чем просто C#.
Билл Гейтс называл .NET одним из лучших созданий Microsoft, и есть весомые основания для такого утверждения. Фреймворк .NET представляет собой мощную платформу для разработки приложений. Вот несколько ключевых аспектов:
В течение длительного времени развитие .NET осуществлялось под названием .NET Framework, преимущественно как платформы для Windows. Однако, начиная с 2019 года, разработка этой платформы была прекращена, и последней версией стала .NET Framework 4.8.
В 2014 году Microsoft представила альтернативную платформу — .NET Core, которая заменила устаревший .NET Framework. .NET Core был разработан с целью объединить возможности .NET Framework и добавить новую функциональность. Важно отметить, что .NET Framework ориентирован преимущественно на Windows, в то время как .NET Core — кроссплатформенное решение.
Таким образом, важно понимать различия между .NET Framework и кроссплатформенным .NET Core, которые предоставляют разные наборы возможностей и подходы к разработке приложений.
В целом, язык C# предлагает множество преимуществ, но имеет некоторые ограничения, которые следует учитывать при выборе языка программирования.
C# отлично подходит для новичков, так как его изучение и понимание относительно просты. В интернете можно найти множество онлайн-школ, предлагающих обучение C# в течение периода от 1 до 6 месяцев. Кроме того, существуют экспресс-курсы, которые позволяют начинающим освоить основы языка всего за несколько дней. Если у вас уже есть опыт работы с C, C++ или Java, изучение C# будет гораздо проще и быстрее.
C# продолжает удерживать свою позицию в рейтинге наиболее востребованных языков программирования на рынке разработки. Начиная с интереса разработчиков для платформы Windows, C# расширил свою сферу применения и научился работать на различных операционных системах, таких как Mac OS, Linux, iOS и Android. Открытый доступ к коду платформы также позволил снять большинство ограничений на использование C#, что привело к активному развитию и расширению его применения. Он рекомендуется как один из основных языков для разработчиков в любой области.
Язык C# обладает мощным и универсальным инструментарием, позволяющим решать широкий спектр задач. На нём часто разрабатываются веб-приложения, игры, мобильные приложения для Android и iOS, а также программы для платформы Windows. Благодаря обширному набору инструментов и средств, возможности разработки на C# практически не имеют ограничений. Хотя другие языки программирования также могут решать эти задачи, некоторые из них более узкоспециализированы, требуют дополнительных инструментов сторонних разработчиков, в то время как C# предлагает более быстрое, простое и ресурсно-эффективное решение широкого спектра задач.
В отношении зарплаты программистов, работающих на C#, статистика Хабр.Карьеры показывает, что она обычно варьируется от 60 до 200 тысяч рублей, со средней зарплатой около 100 тысяч рублей.
Язык C# предлагает множество интересных возможностей для программистов, и он продолжает развиваться, постоянно расширяя список приятных особенностей. Каждая новая версия языка делает его еще лучше и более мощным.
Источник: blog.geekbrains.by
Язык программирования C занимает особое место в истории компьютерных технологий. Его влияние на развитие других языков программирования и системного программного обеспечения сложно переоценить. В этой статье мы рассмотрим историю создания и развития языка C, его стандартизацию и влияние на другие языки программирования.
Понимание истории языка C помогает лучше осознать его важность и уникальные особенности, которые сделали его одним из самых популярных и широко используемых языков программирования в мире.
История языка C начинается с разработки языка B, который был создан Кеном Томпсоном в Bell Labs в конце 1960-х годов. Язык B, в свою очередь, был основан на языке BCPL (Basic Combined Programming Language), разработанном Мартином Ричардсом. BCPL был создан для написания компиляторов и операционных систем, и его простота и эффективность стали основой для будущих разработок. BCPL предоставил программистам мощные инструменты для работы с памятью и ресурсами системы, что стало важным шагом в эволюции языков программирования.
В начале 1970-х годов Деннис Ритчи и Брайан Керниган в Bell Labs начали работу над улучшением языка B. Они стремились создать язык, который был бы более мощным и гибким, сохраняя при этом простоту и эффективность. В результате этих усилий в 1972 году появился язык C. Основной целью разработки языка C было создание инструмента, который позволял бы эффективно писать системное программное обеспечение, такое как операционные системы и компиляторы. Язык C быстро завоевал популярность благодаря своей универсальности и мощным возможностям.
Язык C был разработан с учетом следующих ключевых особенностей:
В 1978 году Деннис Ритчи и Брайан Керниган опубликовали книгу "The C Programming Language", которая стала основным руководством по языку C. Эта книга, часто называемая "K&R" по именам авторов, сыграла ключевую роль в популяризации языка и его стандартизации. "K&R" не только описала синтаксис и семантику языка, но и предложила множество примеров и практических рекомендаций, что сделало ее незаменимым ресурсом для программистов.
В 1983 году Американский национальный институт стандартов (ANSI) начал работу по стандартизации языка C. В 1989 году был опубликован стандарт ANSI C, также известный как C89. В 1990 году этот стандарт был принят Международной организацией по стандартизации (ISO) и стал известен как ISO C. Стандартизация языка C позволила создать единые правила и рекомендации для разработчиков, что способствовало улучшению качества и совместимости программного обеспечения.
С тех пор язык C продолжал развиваться, и были выпущены новые стандарты:
Язык C оказал значительное влияние на разработку многих других языков программирования. Вот некоторые из них:
Язык C также сыграл ключевую роль в разработке системного программного обеспечения. Операционные системы, такие как UNIX и Linux, были написаны на C, что обеспечило их портативность и эффективность. Многие компиляторы, интерпретаторы и другие системные утилиты также были разработаны на C. Благодаря своей мощности и гибкости, C стал основным инструментом для разработки системного программного обеспечения, что сделало его незаменимым для программистов, работающих в этой области.
Язык программирования C оставил неизгладимый след в истории компьютерных технологий. Его простота, эффективность и мощные возможности сделали его одним из самых популярных языков программирования. Влияние C на другие языки и системное программное обеспечение продолжает ощущаться и сегодня. Изучение истории языка C помогает лучше понять основы программирования и эволюцию компьютерных технологий. Понимание ключевых особенностей и преимуществ языка C позволяет программистам использовать его для создания высокопроизводительных и надежных приложений, что делает его важным инструментом для разработки программного обеспечения.
Источник: sky.pro
Ассемблер (англ. «Assembler») — это низкоуровневый язык программирования, который представляет собой промежуточное звено между машинным кодом и высокоуровневыми языками программирования.
Он используется для написания программ, которые управляют компьютером или другими устройствами на более низком уровне, непосредственно взаимодействуя с аппаратным обеспечением. Код, написанный на этом языке, обычно сохраняется с помощью расширения ASM.
Программы на ассемблере пишутся в виде набора мнемонических инструкций, каждая из которых соответствует определенной команде процессора. Эти инструкции затем транслируются (ассемблируются) в машинный код — набор двоичных чисел, которые понимает центральный процессор и выполняет соответствующие операции.
Пример кода на ассемблере.
Начинают изучение программирования обычно с вывода на экран строки «Hello, world!». В языке программирования Python для этого достаточно одной команды:
Просто, понятно и красиво. Однако, существует язык программирования, в котором для достижения того же результата необходимо написать более обширный кусок кода на ассемблере:
Несмотря на видимое отличие в сложности между Python и ассемблером, важно понимать, что каждая его команда выполняет всего лишь одну операцию, в то время как одна команда Python вызывает несколько операций процессора при выполнении. Оба языка имеют свои преимущества и применяются в различных сферах программирования.
Для более полного понимания языка ассемблера начнем с основ работы процессора и того, на каком языке можно общаться с ним.
Схематическое изображение уровня языков программирования.
Процессор представляет собой электронное устройство, которое, несмотря на свою маленькую размерность сегодня (раньше процессоры занимали целые залы), не обладает способностью понимать слова или цифры. Его реакция основана исключительно на двух уровнях напряжения: высокий уровень соответствует «1», а низкий уровень — «0». Таким образом, каждая команда процессора представляет собой последовательность нулей и единиц: «1» — это импульс, а «0» — его отсутствие.
Для взаимодействия с процессором используется машинный язык, который состоит из инструкций, записанных в двоичной форме. Каждая инструкция определяет одну простую машинную операцию: арифметические действия над числами, логические операции (побитовые), ввод-вывод и так далее.
Например, в архитектуре Intel 8088 инструкция 0000001111000011B
представляет операцию сложения двух чисел, в то время как 0010101111000011B
выполняет вычитание.
Программирование на машинном языке является сложной задачей, так как приходится оперировать огромными цепочками нулей и единиц. Написание или проверка такой программы требует большого труда, не говоря уже о понимании чужого кода.
Поэтому был разработан язык ассемблера, в котором операции обозначаются буквами и сокращениями английских слов, отражающих суть команды. Например, команда mov ax, 6 означает: «переместить число 6 в регистр AX».
Ниже приведена таблица с примерами машинного кода, соответствующими инструкциями на ассемблере и их описаниями:
Это произошло в период сороковых годов прошлого века. Ассемблер возник для обеспечения работы первых электронно-ламповых ЭВМ, программы для которых писались на машинном языке. В то время, так как объем памяти у компьютеров был ограничен, команды вводились путем переключения тумблеров и нажатия кнопок. Простейшие вычисления занимали значительное количество времени.
ЭВМ ENIAC на электронных лампах.
Проблема была решена, когда ЭВМ научились хранить программы в памяти. В 1950 году была разработана первая программа-транслятор, которая переводила программы, написанные на понятном человеку языке, в машинный код. Эта программа была названа программой-сборщиком, а язык программирования получил название «ассемблера» (от английского слова «assembler» — сборщик). Впервые этот термин стал использовать английский учёный Морис Уилкс (Maurice Wilkes).
Появление ассемблера значительно облегчило жизнь программистов. Они стали использовать команды, которые состояли из условных обозначений, близких к обычному языку. Кроме того, ассемблер позволил сократить размеры программ — это было особенно важно для компьютеров того времени.
Ассемблер — язык второго поколения, если считать машинный язык первым поколением. Он напрямую взаимодействует с процессором, и каждая его команда представляет собой инструкцию для процессора, а не для операционной или файловой системы. Процесс перевода языка ассемблера в машинный код называется ассемблированием.
Код ассемблера из кодов операций и операндов.
Команды ассемблера состоят из кодов операций и операндов. Операнды представляют собой адреса, из которых процессор берет данные для вычислений и в которые он помещает результат. Эти адреса могут быть ячейками оперативной памяти или регистрами — внутренней памятью процессора. Процессор работает с регистрами гораздо быстрее, чем с оперативной памятью.
Операции в языке ассемблера имеют мнемоническую форму, что делает их удобными для запоминания:
ADD
— сложение (от англ. addition);SUB
— вычитание (от англ. subtraction);MUL
— умножение (от англ. multiplication) и так далее.Регистры и ячейки памяти получают символические имена, например:
EAX
, EBX
, AX
, AH
— имена для регистров;mem1
— имя для ячейки памяти.Пример команды сложения чисел из регистров AX
и BX
:
add ax, bx
И вот команда вычитания чисел из регистров AX
и BX
:
sub ax, bx
В языке ассемблера также присутствуют директивы — команды управления компилятором, то есть программой-ассемблером.
Некоторые из них:
INCLUDE
— открыть файл и начать его компиляцию;EXIT
— прекратить компиляцию файла;DEF
— назначить регистру символическое имя и так далее.Не думайте, что ассемблер — это просто набор инструкций процессора с удобной записью для программиста. Это полноценный язык программирования, на котором можно реализовать циклы, условные операторы, процедуры и функции.
Вот пример ассемблерного кода, который выводит на экран цифры от 1 до 10:
Основная идея состоит в том, что у каждого процессора существует своя архитектура — набор характеристик, определяющих его конструкцию, принцип работы, регистры, адресацию памяти и используемые команды. Если процессоры имеют одинаковую архитектуру, они считаются принадлежащими к одному семейству.
Поскольку наборы команд для различных архитектур процессоров отличаются друг от друга, программы на языке ассемблера, написанные для одного семейства, не будут работать на процессорах другого семейства. В связи с этим его называют машинно-ориентированным языком.
Ассемблер, даже по нашему примеру «Hello, World!»
, показывает, что он не так удобен для разработки, как языки высокого уровня. Большие программы на этом языке уже никто не пишет, но есть области, где он становится незаменимым:
Таким образом, если вам интересно разрабатывать новые микропроцессоры или заниматься реверс-инжинирингом, то стоит серьезно изучить язык ассемблера.
Программисты на ассемблере востребованы, хотя на веб-сайтах по поиску работы, вероятнее всего, вы не найдете вакансий с заголовками «Требуется программист на ассемблере». Зато там много объявлений, которые требуют знание языка в дополнение к языкам высокого уровня, таким как C, C++ или Python. Вакансии могут быть связаны с реверс-инженерингом, компьютерной безопасностью, разработкой драйверов и программ для микроконтроллеров/микропроцессоров, а также системным программированием и другими областями.
Предлагаемая заработная плата обычно соответствует стандартам сферы информационных технологий и может варьироваться от 80 до 300 тыс. руб. в зависимости от уровня квалификации и опыта кандидата.
Нет, такой подход не рекомендуется. На это есть несколько причин:
- ассемблер существенно отличается от языков высокого уровня, поэтому переход с него на другой язык может быть сложным и запутанным процессом;- опыт, полученный при изучении ассемблера, не будет особенно полезным при работе с другими языками. При изучении высокоуровневых языков после него, вам придется начинать все с нуля;
- ассемблер — очень детальный язык программирования. Все рутинные действия, которые обрабатываются автоматически трансляторами в других языках, приходится описывать здесь вручную. Это может быстро надоесть и стать утомительным.
Поэтому, даже если ваша профессия связана с ассемблером, рекомендуется начать изучение программирования с языка высокого уровня. После этого изучение ассемблера будет проходить более легко и эффективно.
Источник: blog.skillfactory.ru
.xlsx
– это расширение документа Excel, который может хранить большой объем данных в табличной форме. Более того, в электронной таблице Excel можно легко выполнять многие виды арифметических и логических вычислений.
Иногда программистам требуется прочитать данные из документа Excel. В Python для этого есть множество различных библиотек, например, xlrd
, openpyxl
и pandas
. Сегодня мы поговорим о том, как читать excel-файлы (xlsx) при помощи Python, и рассмотрим примеры использования различных библиотек для этих целей.
Для начала
Для проверки примеров этого руководства потребуется какой-нибудь файл Excel с расширением .xlsx, содержащий какие-либо исходные данные. Вы можете использовать любой существующий файл Excel или создать новый. Мы создадим новый файл с именем sales.xlsx со следующими данными:
sales.xlsx
Sales Date | Sales Person | Amount |
12/05/18 | Sila Ahmed | 60000 |
06/12/19 | Mir Hossain | 50000 |
09/08/20 | Sarmin Jahan | 45000 |
07/04/21 | Mahmudul Hasan | 30000 |
Этот файл мы и будем читать с помощью различных библиотек Python в следующей части этого руководства.
Библиотека xlrd не устанавливается вместе с Python по умолчанию, так что ее придется установить. Последняя версия этой библиотеки, к сожалению, не поддерживает Excel-файлы с расширением .xlsx. Поэтому устанавливаем версию 1.2.0. Выполните следующую команду в терминале:
pip install xlrd == 1.2.0
После завершения процесса установки создайте Python-файл, в котором мы будем писать скрипт для чтения файла sales.xlsx с помощью модуля xlrd.
Воспользуемся функцией open_workbook() для открытия файла xlsx для чтения. Этот файл Excel содержит только одну таблицу. Поэтому функция workbook.sheet_by_index() используется в скрипте со значением аргумента 0.
Затем используем вложенный цикл for. С его помощью мы будем перемещаться по ячейкам, перебирая строки и столбцы. Также в скрипте используются две функции range() для определения количества строк и столбцов в таблице.
Для чтения значения отдельной ячейки таблицы на каждой итерации цикла воспользуемся функцией cell_value() . Каждое поле в выводе будет разделено одним пробелом табуляции.
import xlrd # Open the Workbook workbook = xlrd.open_workbook("sales.xlsx") # Open the worksheet worksheet = workbook.sheet_by_index(0) # Iterate the rows and columns for i in range(0, 5): for j in range(0, 3): # Print the cell values with tab space print(worksheet.cell_value(i, j), end='\t') print('')
Запустим наш код и получим следующий результат.
Openpyxl – это еще одна библиотека Python для чтения файла .xlsx, и она также не идет по умолчанию вместе со стандартным пакетом Python. Чтобы установить этот модуль, выполните в терминале следующую команду:
pip install openpyxl
После завершения процесса установки можно начинать писать код для чтения файла sales.xlsx.
Как и модуль xlrd, модуль openpyxl имеет функцию load_workbook() для открытия excel-файла для чтения. В качестве значения аргумента этой функции используется файл sales.xlsx.
Объект wookbook.active служит для чтения значений свойств max_row и max_column. Эти свойства используются во вложенных циклах for для чтения содержимого файла sales.xlsx.
Функцию range() используем для чтения строк таблицы, а функцию iter_cols() — для чтения столбцов. Каждое поле в выводе будет разделено двумя пробелами табуляции.
import openpyxl # Define variable to load the wookbook wookbook = openpyxl.load_workbook("sales.xlsx") # Define variable to read the active sheet: worksheet = wookbook.active # Iterate the loop to read the cell values for i in range(0, worksheet.max_row): for col in worksheet.iter_cols(1, worksheet.max_column): print(col[i].value, end="\t\t") print('')
Запустив наш скрипт, получим следующий вывод.
Если вы не пользовались библиотекой pandas ранее, вам необходимо ее установить. Как и остальные рассматриваемые библиотеки, она не поставляется вместе с Python. Выполните следующую команду, чтобы установить pandas из терминала.
pip install pandas
После завершения процесса установки создаем файл Python и начинаем писать следующий скрипт для чтения файла sales.xlsx.
В библиотеке pandas есть функция read_excel(), которую можно использовать для чтения .xlsx-файлов. Ею мы и воспользуемся в нашем скрипте для чтения файла sales.xlsx.
Функция DataFrame() используется для чтения содержимого нашего файла и преобразования имеющейся там информации во фрейм данных. После мы сохраняем наш фрейм в переменной с именем data. А дальше выводим то, что лежит в data, в консоль.
import pandas as pd # Load the xlsx file excel_data = pd.read_excel('sales.xlsx') # Read the values of the file in the dataframe data = pd.DataFrame(excel_data, columns=['Sales Date', 'Sales Person', 'Amount']) # Print the content print("The content of the file is:\n", data)
После запуска кода мы получим следующий вывод.
Результат работы этого скрипта отличается от двух предыдущих примеров. В первом столбце печатаются номера строк, начиная с нуля. Значения даты выравниваются по центру. Имена продавцов выровнены по правому краю, а сумма — по левому.
Программистам довольно часто приходится работать с файлами .xlsx
. Сегодня мы рассмотрели, как читать excel-файлы при помощи Python. Мы разобрали три различных способа с использованием трех библиотек. Все эти библиотеки имеют разные функции и свойства.
Надеемся, теперь у вас не возникнет сложностей с чтением этих файлов в ваших скриптах.