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

Basics of Python and Django. -> Консоль. Алиасы.

BASH Алиасы.

Часто возникает необходимость в консоле создать собственную команду.

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

К примеру, команду, которая добавляет файлы в индекс git и комитит изменения на сервер.

Такая операция проводится довольно часто и состоит из 3-х шагов.

  • добавление файло в индекс для отслеживания;

  • совершение комита;

  • загрузка изменений на удаленный сервер.

Создадаим выполняемый скрипт для этого autocomit.sh.

git add --all
git commit -m 'auto commit'
git push

Добавим права на выполнение.

chmod +x ./autocomit.sh

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

Одним из таких файлов являются .bashrc, он запускается первым.

Добавим в него следующий alias и назовем его agit.

alias agit='./path/to/script/autocomit.sh'

Теперь при перезагрузке терминала эта команда станет доступна.

Basics of Python and 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. Чтение файла.

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)

Работа со строками.

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

Длинна

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}'.format(n)

Разбиение

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()
Basics of Python and 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’

Basics of Python and Django. -> Домашнее задание. Списки.

Домашнее задание. Списки.

  1. Используя генератор списков, создать список, заполненый квадратами целых чисел от 1 до 5.

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

  3. Считать имена файлов внутри текущего каталога и вывести их на экран в виде списка, отсортированного по алфавиту.

  4. Дана строка ‘user1:23:user2:45:user3:37’

Преобразовать ее в список.

['user1',23,'user2',45,'user3',37]

затем получившейся список превратить в следующие форматы списков

[['user1',23],['user2',45],['user3',37]]

[['user1','user2','user3'],['23','45','37']]

Игра блек-джек

Дано два списка, с 4-мя мастями и 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 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