name = data_acquisition("Enter your name: ")
name = data_acquisition <-- присваивание
("Enter your name: ") <-- какой-то левый код
<p>
или <div>
) по одному, извлекать текст уже из них, и вставлять после каждого тега символ - например, перевод строки.The return value is a tuple (type, encoding) where type is None if the type can’t be guessed (missing or unknown suffix) or a string of the form 'type/subtype', usable for a MIME content-type header.
import re
PARTS = re.compile(r'^(.+?)(?:(\d+)\D+)?$')
def natural_sort_key(fname: str):
"Функция извлекает из имени файла описание, по которому его надо сортировать."
prefix, index = PARTS.match(fname).groups()
return (prefix, int(index) if index else 0)
lst.sort(key=natural_sort_key)
import threading
import time
class Data:
def __init__(self):
self.x: int = 0
self.y: int = 0
do_sleep = False
run = True
def reader(d: Data):
while run:
x, y = d.x, d.y
# по идее это условие не должно выполниться никогда
if (x != 0) != (y != 0):
print(f'Got x={x} and y={y}')
else:
print(f'OK {x}', end='\x08\x08\x08\x08')
def writer(d: Data):
while run:
if d.x == 0:
d.x = 1
if do_sleep: pass
d.y = 1
else:
d.x = 0
if do_sleep: pass
d.y = 0
do_sleep = False
instance = Data()
reader_thread = threading.Thread(target=reader, args=(instance,), daemon=True)
writer_thread = threading.Thread(target=writer, args=(instance,), daemon=True)
reader_thread.start()
writer_thread.start()
try:
input()
finally:
run = False
reader_thread.join()
writer_thread.join()
if do_sleep: pass
закомментировать, то в консоли высвечивается только OK - иными словами, присваивание двух полей выполняется достаточно быстро, чтобы поток не успел переключиться в промежутке. Как следствие, reader() всегда видит либо x=0 y=0, либо x=1 y=1.if do_sleep: pass
оставить, то выполнение тела цикла замедляется достаточно, чтобы поток успел переключиться - и, как следствие, reader() начинает видеть структуру данных Data в неконсистентном состоянии, когда x=0 y=1 или когда x=1 y=0. \
.( ) [ ] ^ $ . ? * +
. Если тебе нужен этот символ как просто символ, его надо экранировать! Т.е. если тебе нужно совпадение с символом ?
, надо писать \?
.[abc]
совпадёт с одним символом из указанных: a, b или c. Для задания диапазона можно сделать так: [a-z]
. Это зачастую короче.[^abc]
\w
описывает словесные символы (буквы, цифры и подчёркивание), \d
описывает цифры, и т.д. Аналогично, \W
и \D
описывают всё кроме словесных символов и цифр, соотв.re.sub(r'\W', '', 'test:_:test', re.I) # даст test_test
re.sub(r'[\W_]', '', 'test:_:test', re.I) # даст testtest
async def parse_card(card):
d = dict()
# из карточки берется html
# "вставляется" в объект супа
# и возвращается словарь
# внутри этой функции не используются await
return d