Файлова система. Рядки. Списки.

Робота з рядками.

Ссылка на документацию

Довга.

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 requests

Посилання на документацію

Визначення списків.

Списки - структури різних елементів, що перераховуються, укладені в [] і розділені комою.

Здебільшого списки використовуються у циклах.

Створення списків

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. Використовуючи генератор списків, створити список заповнений квадратами цілих чисел від 1 до 5.

2.Використовуючи генератор списків, створити список, заповнений 10 випадковими числами від 1 до 10, видалити з нього значення, що повторюються.

3.Вважати імена файлів усередині поточного каталогу і вивести їх на екран у вигляді списку, відсортованого за абеткою.

  1. Дано рядок ‘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.

Документація з random

Відкриття оператором 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. -> Домашнє завдання. Рядки.

Домашнє завдання.

  1. Перенести всі файли з однієї директорії до іншої.

  2. Прочитати текстовий вміст з усіх файлів каталогу та об’єднати його в одному файлі через роздільник крапка з комою.

  3. Є текстовий файл виду.

    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’