Файлова система. Рядки. Списки.
Основи Python и Django. -> Рядки.
Робота з рядками.
Довга.
len('Hello')
Доступ по ключу, срез.
ms = 'My string'
print(ms[0])
print(ms[0:3])
Пробуємо змінити знак.
ms[1] = 'e'
TypeError: 'str' object does not support item assignment
Рядок це незмінний тип, тому змінювати потрібно функціями (методами), які повертають новий, змінений екземпляр рядка. Наприклад.
ns = ms.replace('M','W')
>> Yy string
Форматування рядків.
Форматування можна зробити за допомогою оператора % або за допомогою методу format.
Знак %
s = 'hello %s' % 'dima'
d = 'hello %s your number is %d' % ('dima', '4')
Оператор format.
'{}, {}, {}'.format('a', 'b', 'c') # 2.7+ only
'{0}, {1}, {2}'.format('a', 'b', 'c')
'{2}, {1}, {0}'.format('a', 'b', 'c')
Символ f
name = 'Dima'
print(f'Hello {Dima}')
Будь-який рядок це об’єкт пітон з усіма атрибутами та методами тому викликати методи можна відразу після визначення рядка після лапок.
Перевірка типів.
str = 'x = {x_coord}, y = {y_coord:d}'.format(x_coord=23,y_coord=56)
Форматирование числа.
{:,}'.format(1234567890)
Приведення до одного формату (з нулями попереду).
month = '{:02d}'.format(3)
Відсікання чисел після коми. print(‘{:.2f}’.format(222.3333))
Форматування дати.
import datetime
n = datetime.datetime.now()
'{:%Y-%m-%d %H:%M:%S}'
s = 'one,two,three'.split(',')
Злиття
'-'.join(s)
Пошук
string.find(s)
string.rfind(s)
Повертає число (позиція) першого входження або -1 при невдачі.
string.index(s)
Працює як find але викликає виняток у незнаходженні.
Пошук за регулярними виразами.
import re
str = 'My name is dima. My name is dima.'
rez = re.search('is(.*)\.',str)
print(rez.group(1))
Документація з регулярних виразів
Зміна регістру
str.capitalize(); str.lower(); str.upper()
Забираємо прогалини спочатку і наприкінці.
' spacious '.strip()
Основи Python и Django. -> Списки.
Робота із списками.
Порівняння списку та словника.
Визначення списків.
Списки - структури різних елементів, що перераховуються, укладені в [] і розділені комою.
Здебільшого списки використовуються у циклах.
Створення списків
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5];
list3 = ["a", "b", "c", "d"]
Створення за допомогою списків генераторів.
[вираз for змінна in послідовність умова]
lst = [i for i in range(30) if i % 3 == 0]
[i for i in range(30) if i % 3 == 0]
Доступ до елементів списку, зрізи.
print(list1[0])
print(list2[1:5])
print(1:)
Зріз із кроком
s = [1,2,3,4,5,6,7,8]
d = s[1:7:2]
Вставте список замість зрізу.
A = [1, 2, 3, 4, 5]
A[2:4] = [7, 8, 9]
Основні методи роботи зі списками.
Змінити список.
Присвоєнням.
list = ['physics', 'chemistry', 1997, 2000];
print list[2]
list[2] = 2001;
print list[2]
Додавання елементів.
lst.append(element)
Видалення елементів.
del list1[2];
Отримання інформації про список
len(list) # загальна кількість елементів
max(list) # максимальний елемент
min(list) # мінімальний елемент
Додавання.
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6]
множення.
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!']
Перевірка існування елемента.
3 in [1, 2, 3]
Ітерація за списком.
for x in [1, 2, 3]: print x
Вбудовані функції для списків.
Порівняння списків
cmp(list1, list2)
Створення списку з кортежу.
list(seq)
Створення списку з кортежу.
list.append(obj) #додавання нового елемента до кінця списку
list.count(obj) # повертає кількість повторень елемента у списку
list.extend(seq) # додає новий список на кінець (розширює)
lst = [1,2,3]
lst.extend([4,5,6])
print lst
>> [1, 2, 3, 4, 5, 6]
Знаходження індексу елемента.
list.index(obj)
[1, 2, 3, 4, 5, 6]
>>> print lst.index(2)
1
>>> print lst.index(4)
3
>>> print lst.index(44)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 44 is not in list
list.insert(index, obj) # вставляє елемент у потрібну позицію всередину списку
list.pop() # повертає останній об'єкт видаляючи його зі списку
list.remove(obj) #просто видаляє об'єкт зі списку
list.reverse() # перевертає порядок елементів
Перетворення списку на рядок з роздільником.
‘розділювач’.join(list)
Перетворення рядка на список по роздільнику.
'розділювач'.join(list)
Сортування списків.
list.sort([func])
Сортує список, застосовуючи функцію до сусідніх елементів.
Якщо функція повертає 1, змінює елементи місцями і йде спочатку.
lst = [2,4,7,3,9]
def compare(it1,it2):
if it1>it2:
return 1
else:
return -1
lst.sort(compare)
print lst
Compare functions specifies a custom comparison function of two arguments (list items) which should return a negative, zero or positive number.
[('c', 4), ('b', 2), ('a', 3)] => [('c', 4), ('a', 3), ('b', 2)]
lst = [('c', 4), ('b', 2), ('a', 3)]
def letter_cmp(a, b):
if a[1] > b[1]:
return -1
elif a[1] == b[1]:
if a[0] > b[0]:
return 1
else:
return -1
else:
return 1
lst.sort(letter_cmp)
print lst
Основи Python и Django. -> Домашнє завдання. Списки.
Домашнє завдання. Списки.
- Використовуючи генератор списків, створити список заповнений квадратами цілих чисел від 1 до 5.
2.Використовуючи генератор списків, створити список, заповнений 10 випадковими числами від 1 до 10, видалити з нього значення, що повторюються.
3.Вважати імена файлів усередині поточного каталогу і вивести їх на екран у вигляді списку, відсортованого за абеткою.
- Дано рядок ‘user1:23:user2:45:user3:37’
Перетворити її на список.
['user1',23,'user2',45,'user3',37]
потім список, що вийшов, перетворити на наступні формати списків
[['user1',23],['user2',45],['user3',37]]
[['user1','user2','user3'],['23','45','37']]
Гра Блек-джек
Дано два списки, з чотирма мастями та 9 картами.
faces = [1,2,3,4]
cards = [2,3,4,5,6,7,8,9,10]
Необхідно створити новий список колоди карт, в якій буде 36 карт по 9 кожної масті. У цьому числа повторяться тобто. у колоді буде чотири двійки, чотири трійки тощо.
початку гри (запуску програми) користувачеві здається 2 випадкові карти (числа). Підраховується кількість набраних очок, і виводиться результат і
Наприклад:
У вас такі карти – 3,5 загальна кількість очок – 8 Бажаєте взяти ще? д\н
Якщо користувач погоджується, йому видається ще одна карта і процес повторюється доки буде набрано більше 21 очка.
У цьому випадку користувачеві кажуть, що він програв і пропонують повторити гру або вийти з програми.
Якщо користувач відмовляється брати карту вступає в гру комп’ютер.
Він бере випадкові карти до тих пір, поки не набере від 18 очок (включно) до 21.
Якщо кількість балів, набраних комп’ютером, знаходиться між 18 і 21, комп’ютер припиняє брати карти, порівнює свої очки з окулярами користувача і визначає переможця або нічию.
якщо комп’ютер набрав більше 21 то він програє і користувачеві пропонується продовжити гру або вийти.
Питання, що робить цей код?
a = [input() for i in range(int(input()))]
a = [1,2,3,4]
b = a[:]
Основи Python и Django. -> Файли, каталоги.
Бібліотека os. Робота із файловою системою.
Посилання на офіційну документацію
import os
print('OS module!')
print(__file__)
print(os.path.realpath(__file__))
print(os.path.dirname(os.path.realpath(__file__)))
Висновок
OS module!
os-exmpl.py
/home/zdimon/storage1/www/wm_ve/data/python-beginner/ru/2-os-string/code/os-exmpl.py
/home/zdimon/storage1/www/wm_ve/data/python-beginner/ru/2-os-string/code
os.path.realpath - абсолютний шлях з ім’ям файлу. os.path.dirname - абсолютний шлях з ім’ям файлу.
Поточна робоча директорія.
path = os.getcwd()
Створення та видалення директорій.
newdir = 'new'
os.mkdir(newdir)
Якщо потрібно створити одразу структуру директорій. path = “year/month/week/day” os.makedirs(path)
Видалення однієї директорії. os.rmdir(path)
Якщо потрібно видалити непусту директорію, то можна використовувати модуль shutil.
import shutil
shutil.rmtree('/folder_name')
Перевірка існування директорії.
if os.path.isdir('year'):
print("Deleting year dir")
shutil.rmtree('year')
Робота із шляхами.
Посилання на офіційну документацію
os.path.join(path1[, path2[, …]]) -поєднує шляхи з урахуванням особливостей операційної системи.
os.path.getsize(path) -розмір файлу у байтах.
Робота із файлами.
Створимо у циклі кілька непустих файлів, записавши у яких випадкове число від 100 до 200.
import random
for i in range(0,5):
rnd = random.randint(100, 200)
f = open(str(rnd)+'.txt','w')
f.write(str(rnd))
f.close()
При відкритті файлу необхідно вказати режим відкриття:
- r r+ -для читання та читання + записи
- w w+ - відкриття для запису w+ - створить новий порожній якщо не існує
- a a+ - відкрити для додавання до кінця файлу (позиціонує курсор до кінця)
random.randint(A, B) - випадкове ціле число N, A ≤ N ≤ B.
Відкриття оператором with. Читання файлу.
Chytannya faylu.
with open('147.txt','r') as f:
data = f.read()
print("Data is %s" % data)
Отримання вмісту директорії.
print("List directory")
lst = os.listdir('.')
print(lst)
Визначення файлу чи директорії.
data = os.listdir('.')
for d in data:
if os.path.isdir(d):
print("Directory is %s" % d)
else:
print("File is %s" % d)
Основи Python и Django. -> Консоль. Аліаси.
BASH Аліаси.
Часто виникає потреба у консолі створити власну команду.
Напимер для того, щоб запустити послідовно ряд команд, що повторюються.
Наприклад, команду, яка додає файли до індексу git і комітить зміни на сервер.
Така операція проводиться досить часто і складається з трьох кроків.
-
Додавання файло в індекс для відстеження;
-
Здійснення коміту;
-
Завантаження змін на віддалений сервер.
Створюємо скрипт для цього autocomit.sh.
git add --all
git commit -m 'auto commit'
git push
Додамо права на виконання
chmod +x ./autocomit.sh
Тепер щоб створити свою команду, можна скористатися або, визначивши його у файлі, який буде виконуватися щоразу коли ви відкриваєте термінальну сесію.
Одним із таких файлів є .bashrc, він запускається першим.
Додамо в нього наступний або назвемо його agit.
alias agit='./path/to/script/autocomit.sh'
Тепер під час перезавантаження терміналу ця команда стане доступною.
Основи Python и Django. -> Домашнє завдання. Рядки.
Домашнє завдання.
-
Перенести всі файли з однієї директорії до іншої.
-
Прочитати текстовий вміст з усіх файлів каталогу та об’єднати його в одному файлі через роздільник крапка з комою.
-
Є текстовий файл виду.
file1.txt, file2.txt. file3.dat, file4.log
Необхідно прочитати його вміст і створити стільки ж порожніх файлів, які перераховані через кому.
Дано рядок виду.
‘one-two-three-four’
Необхідно переформатувати її на такі види.
‘one;two;three;four’
‘One;Two;Three;Four’
‘1-one;2-two;3-three;4-four’