Добавлю сбоку, потому что грабли тут ходят парой и вторую половину обычно не видят.
Список у меня выгружается в формате IP:PORT:LOGIN:PASS, обновляется в реальном времени, и я его читаю скриптом построчно. Пока пароли буквенные, разбор по двоеточию работает. Как только в пароле появляется своё двоеточие, наивный split(":") рассыпается: строка режется на пять частей вместо четырёх, и последний кусок теряется. Лечится ограничением числа разрезов, в питоне это split(":", 3), и тогда всё, что после третьего двоеточия, остаётся паролем целиком.
Второе место, где это вылезает, файлы окружения. Оболочка читает решётку как начало примечания, и половина пароля пропадает ещё до старта программы. Значение в таком файле надо брать в одинарные кавычки.
Я под прогоны беру приватные серверные адреса под парсинг и пароль из кабинета кладу сразу в переменную окружения, чтобы он вообще нигде не встречался в открытом виде в командах.