summaryrefslogtreecommitdiff
path: root/PYTHON/STRING.md
blob: 6e7d4f9c119746aaae128f26193f67884e1e1dca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
```python
my_str = 'Vlapa'
print(len(my_str))
# 5

print(my_str[0])
# V

print(my_str[2:5])
# apa


my_str.upper()
my_str.replace('__old', '__new') # само значение не изменяется !
my_str.count('__x') # считает кол-во вхождений


```
![[Снимок экрана 2025-02-11 в 01.15.10.png]]

Создать 1000 папок со случайными именами:
![[Снимок экрана 2025-02-11 в 01.17.25.png]]


**Работа с регистрами**

![[telegram-cloud-photo-size-4-5863854399405801203-w.jpg]]

_Строки в Python имеют свойство регистра — прописные и строчные буквы считаются разными символами._

Для преобразования регистра используются методы строк:
str.upper() — преобразует строку к верхнему регистру.
str.lower() — преобразует строку к нижнему регистру.
str.swapcase() — меняет регистр каждого символа на противоположный.
str.capitalize() — делает первую букву заглавной, остальные строчными.

Регистр конкретного символа можно проверить в строке методами:
str.isupper() — проверка на заглавный регистр.
str.islower() — проверка на строчный регистр.

Регистр важно учитывать при сравнении строк на равенство.


### Полезные строковые методы

1️⃣ .upper() **– переводит строку в ВЕРХНИЙ РЕГИСТР**
text = "hello world"
print(text.upper())  # "HELLO WORLD"

2️⃣ .lower() **– переводит строку в нижний регистр**
text = "HELLO WORLD"
print(text.lower())  # "hello world"

3️⃣ .strip() **– удаляет пробелы и символы переноса с начала и конца строки**
text = "  hello world  "
print(text.strip())  # "hello world"

Можно указать символы, которые нужно удалить:
text = "##hello##"
print(text.strip("#"))  # "hello"

4️⃣ .replace(old, new) **– заменяет подстроку в строке**
text = "Hello, world!"
print(text.replace("world", "Python"))  # "Hello, Python!"

5️⃣ .split(separator) **– разделяет строку по разделителю и возвращает список**
text = "apple,banana,orange"
print(text.split(","))  # ['apple', 'banana', 'orange']

Если разделитель не указан, удаляются пробелы:
text = "Hello   world"
print(text.split())  # ['Hello', 'world']

Эти методы часто используются вместе, например:
text = "  hello, world!  "
clean_text = text.strip().replace(",", "").upper()
print(clean_text)  # "HELLO WORLD"


### f-строки с выражениями в форматировании

Да, ты можешь использовать **выражения прямо внутри f-строк**!
```python
value = 3.14159
print(f"Округлено: {value:.2f}")      # Округлит до 2 знаков
print(f"В квадрате: {value**2:.1f}")  # Сразу вычисляет и форматирует
```

🧠 **А можно и условие:**
```python
name = None
print(f"Привет, {name or 'гость'}!")
```

🗣 **При генерации отчётов, логов, CLI-вывода, шаблонов — везде, где важна читаемость и компактность.**



PEP 750 вводят t-строки — это как f"..." но:
- интерполяция ограничена и контролируема;
- поддерживается строгое соответствие шаблону;
- можно передавать переменные явно, предотвращая **SQL-инъекции** и XSS.

Для чего? Для того, чтобы писать shell-команды, SQL, HTML и т.д. без риска инъекций и без ручного экранирования

**Пример**:
  
```PYTHON
from string.templatelib import Template

name = "World"
template: Template = t"Hello, {name}!"

safe_output = html(template)
```

Здесь html() — это функция, которая принимает объект Template и возвращает безопасную строку, экранируя потенциально опасные вставки

PEP 787 предлагает добавить это прямо в subprocess и shlex (но пока в статусе "отложен")

Следим за развитием 😊