Python 3: Строки. Функции и методы строк¶
Определение позиции подстроки в строке с помощью функций str.find и str.rfind .
Функция str.find показывает первое вхождение подстроки. Все позиции возвращаются относительно начало строки.
Можно определить вхождение в срезе. первое число показывает начало среза, в котором производится поиск. Второе число — конец среза. В случае отсутствия вхождения подстроки выводится -1.
Функция str.rfind осуществляет поиск с конца строки, но возвращает позицию подстроки относительно начала строки.
Python: Извлекаем имя файла из URL¶
Понадобилось мне отрезать от URL всё, что находится после последнего слэша, т.е.названия файла. URL можеть быть какой угодно. Знаю, что задачу запросто можно решить с помощью специального модуля, но я хотел избежать этого. Есть, как минимум, два способа справиться с поставленным вопросом.
Способ №1¶
Достаточно простой способ. Разбиваем строку по слэшам с помощью функции split() , которая возвращает список. А затем из этого списка извлекаем последний элемент. Он и будет названием файла.
Повторим шаг с присвоением переменной:
Способ №2¶
Второй способ интереснее. Сначала с помощью функции rfind() находим первое вхождение с конца искомой подстроки. Функция возвращает позицию подстроки относительно начала строки. А далее просто делаем срез.
Функция cut в питоне как написать
Время прочтения: 6 мин.
Перед нами была поставлена задача по анализу выгруженной из базы данных информации. Сложность задачи оказалась в том, что получен очень большой многострочный текстовый файл (около 8 Гб, 14,4 млн. строк), который невозможно открыть с помощью общедоступных инструментов (например, Excel, у которого есть ограничение на количество записей в рабочем листе). В связи с этим возникла необходимость разбить его на несколько файлов так, чтобы они содержали заданное количество строк. После успешного решения данной задачи мы решили поделиться использованными методами.
В данной статье мы разберем три метода «нарезки» текстового файла на несколько с заданным количеством строк с помощью языка программирования Python. Далее заданное количество строк будем называть «count_lines».
Идея первого метода нарезки файла, назовем его «sequence_cut (последовательная нарезка)», состоит в том, что считывается строка из входящего файла и записывается в очередной файл. Такая последовательность действий продолжается до тех пор, пока количество записанных строк не превосходит count_lines. Далее делается тоже самое, но уже в новый файл для записи. И так далее. Завершается процесс, когда достигается конец входящего файла.
Идея второго метода, назовем его «batch_cut (пакетная нарезка)», состоит в том, что считывается строка из входящего файла и сохраняется эта информация в список. Продолжаются такие операции до тех пор, пока длина списка не превосходит count_lines. Когда длина списка-накопителя будет равна count_lines, необходимо сделать из списка одну большую строку и записать ее в очередной файл. Далее делается тоже самое, но уже в новый файл для записи, не забывая очистить список. И так далее. Завершается процесс, когда достигается конец входящего файла.
Идея третьего метода, назовем его «pandas_cut», базируется на использовании модуля pandas, который написан на языке Python и применяется для обработки и анализа данных. С помощью функции read_csv и параметров skiprows (пропустить заданное количество строк файла), nrows (взять заданное количество строк файла), sep=’/n’ (разделитель), encoding=’cp1251′ (кодировка файла), будем считывать очередные count_lines строк файла path_file_in и записывать полученный результат в новый файл с помощью метода to_csv.
Протестируем функции sequence_cut, batch_cut на время выполнения, соблюдая некоторые условия:
- Читаемый файл и директория для файлов, полученных после нарезки, хранятся на рабочей машине пользователя, то есть не будет траты времени на передачу данных на удаленный сервер.
- Процессор на рабочей машине AMD Ryzen 3 (3.60 GHz); накопитель SSD; оперативная память 8 Гб; операционная система Windows 1064x.
- Читаемый файл будет большого объема: интересно сравнить время выполнения функций на файлах с большим количеством строк, так как для файла с маленьким количеством строк разница по времени не ощутима.
- Входящий файл будет нарезан по 500 000 строк.
- В функции batch_cut длина списка batch будет равна count_lines.
- Функции будут протестированы на файле, полученном с помощью функции generate_data (реализация ниже), и «боевом файле».
Сделаем два тестовых файла на 10 000 000 и 20 000 000 строк, приближенные по качеству содержания к боевому файлу.
Засечем время выполнения функций sequence_cut, batch_cut, pandas_cut на файлах ‘battle_file.txt’, ‘test10^7.txt’, ‘test10^7 prod 2.txt’. Нарезанные файлы сохраним в соответствующие директории.
Wall time: 4min
Wall time: 3min 50s
Wall time: 13min 14s
Wall time: 2min 40s
Wall time: 2min 20s
Wall time: 7min 30s
Wall time: 5min 22s
Wall time: 4min 25s
Wall time: 19min 39s
В ходе нашего тестирования получили следующие результаты:
| Название файла | Размер файла | Количество строк в файле | Время sequence_cut |
Время batch_cut | Время pandas_cut |
| battle_file.txt | 7 982 472 КБ | 14 400 000 | 4min | 3min 50s | 13min 14s |
| test10^7.txt | 4 931 645 КБ | 10 000 000 | 2min 40s | 2min 20s | 7min 30s |
| test10^7 prod 2.txt | 9 863 322 КБ | 20 000 000 | 5min 22s | 4min 25s | 19min 39s |
Видно, что метод пакетной нарезки (batch_cut) дает преимущество во времени и работает быстрее на файлах с очень большим объемом данных. Стоит учитывать, что пакетный способ нарезки использует список, который хранит большое количество данных в памяти, чего нет у последовательного способа нарезки (sequence_cut).
Примеры функций Pandas Cut ()
Функция Pandas Cut () используется для разделения элементов массива в отдельные контейнеры. Функция CUT () работает только на одномерных объектах, подобных массивам.
2. Использование функции Pandas Cut ()
Функция CUT () полезна, когда у нас есть большое количество скалярных данных, и мы хотим выполнить на нем какой-то статистический анализ.
Например, скажем, у нас есть массив чисел от 1 до 20. Мы хотим разделить их на две бункеры (1, 10] и (10, 20] и добавлять этикетки, такие как «минимумы» и «высокие». Мы Может легко выполнить это, используя функцию Pandas Cut ().
Кроме того, мы можем выполнять функции на элементах специфических элементов Bin и этикетки.
3. Синтаксис функции Pandas Cut ()
Синтаксис функции CUT ():
- х это входной массив должен быть вписан. Это должно быть одномерным.
- BINS Определяет края бин для сегментации.
- правильно Указывает, включает ли главный край или нет, значение по умолчанию верно.
- этикетки используется для уточнения меток для возврата BINS.
- ретбинс Указывает, нужно ли возвращать мусорные баки или нет.
- Точность Определяет точность, в которой хранить и отображать этикетки BINS.
- icnly_lowest Указывает, должен ли первый интервал оставаться в включении или нет.
- Дубликаты СПЕЦИФИФИФИФИФИФИФИФИФИФИФИФИФИКУ, ЧТО ДЛЯ ДРУГИМИ, Если бы края бункеров не являются уникальными, поднимают ли ValueError или Drop Noniques.
4. Примеры функций Pandas Cut ()
Давайте посмотрим на некоторые примеры функции Pandas Cut (). Я буду использовать Numpy Чтобы генерировать случайные числа для заполнения Dataframe объект.
4.1) Номера сегмента в Bins
Обратите внимание, что 25 является частью корзины (1, 25]. Это потому, что крайне правый край включен по умолчанию. Если вы не хотите, чтобы тогда пропустите Rover = False Параметр на функцию CUT ().
4.2) Добавление меток в мусорные бины
Так как мы хотим 10, чтобы быть частью максимума, мы указываем право = ложь в вызове функции CUT ().