Skip to content

Work with Python libraries #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Работа_с_библиотеками/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Работа_с_библиотеками/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Работа_с_библиотеками/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 40 additions & 0 deletions Работа_с_библиотеками/.idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

65 changes: 65 additions & 0 deletions Работа_с_библиотеками/Calendar_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import calendar as cln
import time, locale

for i in cln.Calendar(firstweekday=5).iterweekdays():
print(i)
a = cln.setfirstweekday(cln.TUESDAY)
print()
print(cln.firstweekday())
print()
print(cln.weekday(2002, 10, 8))
print()
print(cln.monthrange(2021, 2))
print()
x = cln.monthcalendar(2021, 10)
for i in x:
print(i)
print()
struct = time.gmtime()
print(struct)
# time.struct_time(tm_year=2020, tm_mon=5,
# tm_mday=4, tm_hour=10, tm_min=28, tm_sec=54,
# tm_wday=0, tm_yday=125, tm_isdst=0)
print()
print()
sec = cln.timegm(struct)
print(sec)
# 1588588134

time.gmtime(sec)
print()
print()
print(tuple(cln.day_name))
# ('Monday', 'Tuesday', 'Wednesday',
# 'Thursday', 'Friday', 'Saturday', 'Sunday')
print()
print(list(cln.day_abbr))
# ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
print()
print(*list(cln.month_name))
# ['', 'January', 'February', 'March', 'April',
# 'May', 'June', 'July', 'August', 'September',
# 'October', 'November', 'December']
print()
print(*list(cln.month_abbr))
# ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
# 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')

print()
print()
print(tuple((cln.day_name)))
# ('Понедельник', 'Вторник', 'Среда',
# 'Четверг', 'Пятница', 'Суббота', 'Воскресенье')
print(list(cln.day_abbr))
print()
# ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']
print(*list(cln.month_name))
print()
# ['', 'января', 'февраля', 'марта', 'апреля',
# 'мая', 'июня', 'июля', 'августа', 'сентября',
# 'октября', 'ноября', 'декабря']
print(*list(cln.month_abbr))
# ['', 'янв', 'фев', 'мар', 'апр', 'мая', 'июн',
# 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']
110 changes: 110 additions & 0 deletions Работа_с_библиотеками/Calendar_module_practic.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Подключаем стандартные библиотеки Tkinter, datetime и calendar с помощью import.
# Инициализируем класс root, с помощью которого будет отрисовываться графический интерфейс.
# Задаем заголовок окна «Calendar». Объявляем пустой список days.
# В дальнейшем в нем будут храниться поля таблицы. Каждое такое поле соответствует определенному дню.
# В переменную now будем хранить текущую дату. В переменных year и month будут храниться год и месяц,
# календарь которых в данный момент отображается.

from tkinter import *
import calendar
import datetime as dt
root = Tk()
root.title('Calendar')
days = []
now = dt.datetime.now()
year = now.year
month = now.month

# Меняем текущий месяц
# Функции prew и next будут вызываться при нажатии на одну из клавиш смены месяца.
# Если текущее значение месяца «январь» и пользователь нажмет на кнопку перехода на предыдущий месяц,
# то тогда уменьшится год и месяц поменяет значение на «декабрь».
# Обратите внимание на то, что переменные month и year глобальные. Поэтому перед изменением их значения в функции
# необходимо использовать ключевое слово global.
# Функция fill перерисовывает календарь.

def prew():
global month, year
month -= 1
if month == 0:
month = 12
year -= 1
fill()

def next():
global month, year
month += 1
if month == 13:
month = 1
year += 1
fill()

# Перерисовка календаря
# В функции fill будет перерисовываться отображение всех элементов. Она будет вызываться в начале работы
# программы и каждый раз после изменения месяца, для которого нужно вывести календарь.
# В начале выводим наименование месяца и год. Вычисляем количество дней в предыдущем месяце и записываем
# в переменную prew_month_days. В переменноу week_day запишем номер дня недели первого числа
# месяца (от 0 – если первое число выпадет на понедельник, до 6 – на воскресенье).
# После этого в трех циклах выводим числа и их корректируем их цвета:
# В первом цикле заполняем номера дней выбранного месяца. Отображать будем их черным цветом.
# Если это текущий день, то его фон делаем зелёным.
# Во втором цикле заполняем числа предыдущего месяца. Они отображаться будут серым цветом.
# В третьем цикле добавляем числа следующего месяца. Их также выводим серым цветом.

def fill():
info_label['text'] = calendar.month_name[month] + ', ' + str(year)
month_days = calendar.monthrange(year, month)[1]
if month == 1:
prew_month_days = calendar.monthrange(year-1, 12)[1]
else:
prew_month_days = calendar.monthrange(year, month - 1)[1]
week_day = calendar.monthrange(year, month)[0]
for n in range(month_days):
days[n + week_day]['text'] = n+1
days[n + week_day]['fg'] = 'black'
if year == now.year and month == now.month and n == now.day:
days[n + week_day - 1]['background'] = 'yellow'
days[n + week_day]['background'] = 'lightgray'
else:
days[n + week_day]['background'] = 'lightgray'
for n in range(week_day):
days[week_day - n - 1]['text'] = prew_month_days - n
days[week_day - n - 1]['fg'] = 'gray'
days[week_day - n - 1]['background'] = '#f3f3f3'
for n in range(6*7 - month_days - week_day):
days[week_day + month_days + n]['text'] = n+1
days[week_day + month_days + n]['fg'] = 'gray'
days[week_day + month_days + n]['background'] = '#f3f3f3'

# Отображение элементов
# Для отображения календаря в Python 3 мы используем библиотеку Tkinter.
# Воспользуемся её упаковщиком grid. Он представит все создаваемые нами элементы в виде таблицы.
# В первой строке в крайней левой и крайней правой ячейках (с номерами столбцов 0 и 6) отобразим кнопки смены месяцев.
# По центру выведем текстовое поле, в котором будет отображаться текущий год и месяц.
# Это поле будет занимать 5 ячеек таблицы, поэтому выставим параметр columnspan в 5.

prew_button = Button(root, text='<', command=prew)
prew_button.grid(row=0, column=0, sticky='nsew')
next_button = Button(root, text='>', command=next)
next_button.grid(row=0, column=6, sticky='nsew')
info_label = Label(root, text='0', width=1, height=1,
font=('Verdana', 16, 'bold'), fg='darkorange')
info_label.grid(row=0, column=1, columnspan=5, sticky='nsew')

# Во второй строке выведем сокращенные названия месяцев.
# Дальше отображаем 6 строк по 7 столбцов, которые будем заполнять числами, обозначающими номера дней.
# В завершении используем функцию fill, которая заполнит наш календарь начальными данными – календарем текущего месяца.
# После этого запустим цикл обработки событий mainloop.

for n in range(7):
lbl = Label(root, text=calendar.day_abbr[n], width=1, height=1,
font=('Verdana', 10, 'normal'), fg='blue')
lbl.grid(row=1, column=n, sticky='nsew')
for row in range(6):
for col in range(7):
lbl = Label(root, text='0', width=4, height=2,
font=('Verdana', 16, 'bold'))
lbl.grid(row=row+2, column=col, sticky='nsew')
days.append(lbl)
fill()
root.mainloop()
49 changes: 49 additions & 0 deletions Работа_с_библиотеками/Collections_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
print('---------10. Библиотека для работы с конвейерами и коллекциями---------')

# Counter ("счетчик") - вид словаря, который предназначен для подсчета количества хэшируемых объектов.


# defaultdict - наследуемый класс Python dict, который принимает default_factory как первичные аргументы.

# Тип default_factory — это обычный тип Python, такой как
# int или list, но вы также можете использовать функцию или лямбду.

# Тип данных, который практически в точности повторяет функциональные возможности словарей,
# за исключением способа обработки обращений к несуществующим ключам.


# OrderedDict - это упорядоченный словарь, то есть dict, который помнит порядок, в котором были вставлены ключи.

# Если новая запись перезаписывает существующую запись, исходная позиция вставки в словарь остается неизменной.

# При удалении записи и повторном ее добавлении в OrderedDict она переместится в конец словаря.

# Могут использоваться в коде абсолютно аналогично обычным словарям.


# namedtuple возвращает новый класс (подкласс) кортежей: именованный кортеж.

# Аналогичен обычному кортежу, но позволяет
# обращаться к элементам по названию поля, а не только по индексу.

# Таким образом, именованный кортеж наделяет позицию в кортеже
# дополнительным смыслом и делает код прозрачнее (самодокументируемым).

# При этом по производительности ничем не отличаются от обычных кортежей (не являются более медленными и тяжелыми).

from collections import deque
# FIFO = first in first out (очереди)
# LIFO - last in first out (стеки)
stack = deque()
stack.append(18)
stack.pop()

import collections
cartoha = collections.namedtuple('Cartoha', ['a', 'b'])
cpk = cartoha(35, 67)

print(cpk.a)
print()
print(cpk.b)
print()
print(cpk)
50 changes: 50 additions & 0 deletions Работа_с_библиотеками/Csv_module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import csv
import os

def wr_csv1():
with open("classmates.csv", mode="w+") as w_file:
names = ["Имя", "Возраст"]
file_writer = csv.DictWriter(w_file, delimiter=";", lineterminator="\r", fieldnames=names)
file_writer.writeheader()
file_writer.writerow({"Имя": "Саша", "Возраст": "6"})
file_writer.writerow({"Имя": "Маша", "Возраст": "15"})
file_writer.writerow({"Имя": "Вова", "Возраст": "14"})

#wr_csv1()

def wr_csv11():
csv.register_dialect('my_dialect', delimiter=';', lineterminator="\r")
with open("classmates.csv", mode="w") as w_file:
file_writer = csv.writer(w_file, 'my_dialect')
file_writer.writerow(["Имя", "Класс", "Возраст"])
file_writer.writerow(["Женя", "3", "10"])
file_writer.writerow(["Саша", "5", "12"])
file_writer.writerow(["Маша", "11", "18"])

#wr_csv11()

def wr_csv2():
with open('new_csvfile.csv', mode='w', newline='') as fitr:
file_writer = csv.writer(fitr, delimiter=';', lineterminator='\r\n')
file_writer.writerow(['Fio', 'sum_balls', 'grades'])
file_writer.writerow(['Valyaev G.A.', '273', '5+'])
file_writer.writerow(['Veselovskiy V.V.', '262', '5+'])
file_writer.writerow(['Berkman Aidyn', '263', '4'])

#wr_csv2()

with open('new_csvfile.csv', 'r', encoding='utf-8') as fit:
reader = csv.DictReader(fit, delimiter=';')
count = 0
for row in reader:
if count == 0:
print()
print(f'Таблица содержит столбцы с такими названиями: {" | ".join(row)}:')
print()
print(f' {row["Fio"]} сдал ЕГЭ на {row["sum_balls"]} баллов(а) и получил за предмет {row["grades"]} :)')
count += 1
print()
print(f'А всего в этой таблице {count + 1} строк.')

os.startfile(r'C:\Users\Asus\PycharmProjects\Cases_Python\classmates.csv')
os.startfile(r'C:\Users\Asus\PycharmProjects\Cases_Python\new_csvfile.csv')
Loading