как преобразовать строку в код python

Как выполнить строку, содержащую код Python в Python?

Как выполнить строку, содержащую код Python в Python?

12 ответов

для утверждения, используйте exec(string) (в Python 2/3) или exec string (Python 2):

когда вам нужно значение выражения, использовать eval(string) :

однако первым шагом должно быть спросить себя, действительно ли вам это нужно. Выполнение кода обычно должно быть последним средством: он медленный, уродливый и опасный, если он может содержать введенный пользователем код. Вы всегда должны смотреть на альтернативы в первую очередь, такие как функции более высокого порядка, чтобы увидеть, могут ли они лучше удовлетворить ваши потребности.

в примере строка выполняется как код с помощью функции exec.

eval и exec являются правильным решением, и их можно использовать в безопасное порядке.

как говорится в справочное руководство Python и ясно объяснено в этой руководства eval и exec функции принимают два дополнительных параметра, которые позволяют пользователю указать, какие глобальные и локальные функции и переменные доступны.

по существу вы определяете пространство имен, в котором будет выполняться код.

вы выполняете код с помощью exec, как и в следующем сеансе ожидания:

избежать exec и eval

используя exec и eval в Python очень неодобрительно.

есть лучшие альтернативы

из верхнего ответа (акцент мой):

однако первым шагом должно быть спросить себя, действительно ли вам это нужно. выполнение кода должно как правило, позиция последней инстанции: это медленно, уродливо и опасно, если он может содержать введенный пользователем код. Вы всегда должны смотреть на альтернативы во-первых, такие как функции высшего порядка, чтобы увидеть, если они могут лучше удовлетворить ваши потребности.

установить и получить значения переменных с именами в строках

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

вместо этого лучше использовать dict.

это не идиоматические

Python не PHP

не пытайтесь обойти идиомы Python, потому что некоторые другие языки делают это по-другому. Пространства имен в Python и просто потому что это дает вам инструмент exec Это не означает, что вы должны использовать этот инструмент.

опасно

таким образом, eval не является безопасным, даже если вы удалите все глобалы и встроенные!

проблема со всеми этими попытки защитить eval () заключается в том, что они являются черными списками. Они явно удалите вещи, которые могут быть опасными. Это проигранная битва, потому что если в списке остался только один элемент, вы можете атаковать систему.

Итак, можно ли сделать eval безопасным? Трудно сказать. На данный момент я думаю, что вы не можете причинить никакого вреда, если не можете использовать двойные подчеркивания, поэтому, возможно, если вы исключите любую строку с двойными подчеркиваниями, вы в безопасности. Возможно.

трудно читать и пойми!—14—>

во-первых, exec затрудняет людям чтение вашего кода. Чтобы понять, что происходит, мне не просто нужно прочитать ваш код,я должен прочитать ваш код, выяснить, какую строку он собирается генерировать, а затем прочитать этот виртуальный код. Итак, если вы работаете в команде, или публикация программного обеспечения с открытым исходным кодом или обращение за помощью к кому-то вроде StackOverflow затрудняют помощь других людей. И если есть шанс, что вы собираетесь отлаживать или расширять этот код через 6 месяцев, вы усложняете его для себя напрямую.

Источник

10 приемов для преобразования и декомпозиции строк в Python

В этой статье мы рассмотрим некоторые приемы для парсинга и токенизации строк в Python.

Никто не может отрицать важность анализа текста и синтаксического анализа строк. Он применяется практически во всех направлениях разработки программного обеспечения, от парсинга URL-адресов до обработки естественного языка. Мы не будем описывать все возможные его применения — это выходит далеко за рамки одной статьи. Но о некоторых базовых методах работы со строками и токенами в Python мы расскажем.

Эти маленькие скрипты следует рассматривать как строительные блоки для приложений для анализа текста и предварительной обработки данных. Знание основ очень важно для дальнейшего развития.

А теперь давайте перейдем к нашему списку!

1. Translate и Replace

Первый случай — заменить или удалить некоторые символы или подстроки из текста. В Python есть встроенные функции в модуле string, которые выполняют эти задачи.

Метод translate() использует таблицу (которая строится при помощи функции maketrans ) для удаления или изменения определенных символов:

Метод replace() работает так, как следует из его названия — изменяя подстроку на нужную:

2. Очистка строки

Теперь мы можем применить информацию из предыдущего пункта для очистки строки. Это один из наиболее востребованных процессов в проектах data science при очистке данных. Отличный пример — это необработанный текст с пробельными символами и переносами строк. Вот простой скрипт для очистки такой строки:

3. Разбиение строки

Для анализа текста требуются различные метрики, такие как количество слов, количество символов, средняя длина предложения. Чтобы вычислить эти значения, нам нужно подготовить текст — очистить и разделить. К счастью для нас, в Python есть несколько встроенных функций для разделения текста:

4. Strip и zfill

Еще одна важная функция — это возможность удалять из строки лишние начальные и конечные символы. Для этого у нас есть семейство функций strip() :

Кроме того, есть полезная функция для дополнения чисел ведущими нулями:

5. Деконструкция и реконструкция

Для генерации текста необходимо построить предложения и фразы из словаря слов. Этот процесс обратный разделению строки. Python позволяет нам использовать встроенный строковый метод join() для объединения слов обратно в предложение:

6. Удаление знаков препинания

Это еще один случай очистки текста. Модуль string в Python имеет множество встроенных констант с отдельными наборами символов. string.punctuation — один из них, поэтому мы будем использовать его для очистки строки.

7. Работа с регистрами

Форматирование текста — это боль каждого data scientist’а. Слова и предложения в разных форматах создают много проблем при очистке данных. Однако и для этих задач в Python есть нужные функции:

8. Мир регулярных выражений

Иногда непросто очистить текст с помощью определенных символов или фраз. Вместо этого нам необходимо использовать некоторые шаблоны. И здесь нам на помощь приходят регулярные выражения и соответствующий модуль Python.

Мы не будем обсуждать всю мощь регулярных выражений, а сосредоточимся на их применении — например, на разделении и замене данных. Да, эти задачи были описаны выше, но вот более мощная альтернатива.

Разделение по шаблону:

9. Токенизация строки

Пришло время собрать все трюки, которые мы узнали ранее, и применить их для настоящей токенизации. Однако мы не будем повторять весь код. Вот пример довольно классной альтернативы с использованием pandas. В нашем примере мы должны очистить строку от лишних символов, привести к одному регистру и разбить ее на токены.

10. Поиск подстроки

Перед выполнением любой задачи по очистке мы должны определить, действительно ли она нужна. В большинстве случаев вопрос сводится к поиску какого-либо символа или фразы в тексте. Python предоставляет множество функций для наших целей.

Конечно, любую задачу можно решить множеством способов, особенно если мы говорим о Python. Однако мы думаем, что наше видение синтаксического анализа строк будет для вас полезным.

Источник

Как строку преобразовать в команды?

Нам дана строка:
«print(‘Hello’)
print(‘world’)»

как это(то есть строку) преобразовать в команды(инструкции), то есть как сделать чтобы это выполнилось?
и возможно ли это вообще?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Преобразовать строку в дату
Есть строка s=’2019-03-08 05:19:29.826600+03′ нужно преобразовать в дату, не могу выбрать.

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

Добавлено через 48 минут
ну так: мне надо передать значение в виде строки(ну то есть несколько команд), которое в списке, в класс и чтобы там эти команды выполнились, короче надо чтобы это

В нынешнем описании проблемы все решается более чем просто. Подготавливаешь объекты кода, которые надо выполнить и отправляешь в нужный класс, а там уже его вызываешь и все!

я хотел так сделать
и решил узнать нет ли другого способа, менее объёмного, и ещё это много названий функций надо придумать и потом в них искать тебе нужную

есть ли другой способ, если нет то буду использовать первоначальный, то есть этот

Хранить их в словаре и по ключу дергать нужные.

У тебя какая фобия, что ты боишься создавать функции или в чем проблема? Звучит просто ужасно нелепо.
Тебе нужно сделать много действий, нужно много функции и что? Ни какой громоздкости тут НЕТ!

Вообще-то, я специально в своем примере показал тебе, что так делать не надо. Ты код вообще не смотрел чтоль? Посмотри, как последнюю команду в executor я передавал.

хорошо чтобы вас не путать, другая ситуация.

Дан файл 1.txt:
print(a)
print(b)

Добавлено через 2 минуты

Кем дан? Для чего дан? С какого перепугу это не модуль? Ты вообще понимаешь, что такое модули и зачем они?

да их будет много,и зачем они потом мне нужны в памяти

Добавлено через 5 минут
просто мне скажите можно ли это(строку) выполнить

Открою секрет в больших программах всегда много функций и программы состоят из десятков модулей и многих тысяч строк кода и так же тысяч функций и классов.
Это ни сколько не проблема, python и другие языки не ограничивают тебя на количество функций и т д и на производительности это ни как не скажется.

То, что ты вынесешь функции в файл ничего не изменит, это только сделает твою программу достойной показа в цирке и все, а интерпретатор все равно будет перед выполнением интерпретировать этот код, сохранять созданные объекты в памяти и т д

Источник

BestProg

Содержание

Поиск на других ресурсах:

Функция может вызваться одним из двух способов:

Пример.

Функция имеет две реализации:

Пример.

Функция repr() реализует преобразование в строку таким образом, если бы эта строка была литералом в программном коде.
Функция repr() может быть применена к:

Пример 1. Конвертировать целое число в строку, которая представлена литералом.

Пример 2. Конвертировать в строку число с плавающей запятой.

Пример 3. Конвертировать строку символов в другую строку так если бы она была литералом.

Пример 4. Конвертирование кортежа.

В языке Python функции repr() и str() преобразуют произвольные объекты в их строчное представление.

Разница между функциями проявляется в том, как они конвертируют строку.
Функция repr() возвращает представление строчного объекта в виде строки программного кода, которую можно выполнить чтобы воссоздать этот объект. Иными словами, функция repr() возвращает строку в виде строки. При использовании такого объекта в функции print() будут выведены ограничивающие строку кавычки (строка во вложенных кавычках).
В свою очередь, функция str() используется для конвертирования строки в строку без ее преобразования в предшествующую форму. При использовании результата функции str() в функции print() будет выведена обычная строка в одинарных кавычках.

Например.

Как видно из вышеприведенного кода, функция repr() возвращает строку как литерал

а функция str() возвращает обычную строку

Функция float() возвращает число с плавающей запятой, которое может быть образовано от другого числа или от строки. Функция может вызываться одним из двух способов:

В качестве входного параметра или исходного результата функция может использовать грамматические символы:

Пример.

Функции ord() и chr() используются для одиночных символов. Эти функции являются инверсными друг к другу.
Функция chr() позволяет получать символ на основе его кода. Функция ord() позволяет получить код на основе представления символа.

Общая форма вызова функции chr() следующая

где c – символьное представление символа с Unicode-кодом i .

Общая форма вызова функции ord()

Пример.

7. Можно ли в Python сложить строку с числом?

Нет, нельзя. Если нужно сложить число в форме строки, то для этого используется соответствующая функция преобразования. Если нужно сложить две строки (конкатенация строк), то число конвертируется в строку с помощью соответствующей функции.

Источник

Строки и функции для работы с ними (faq)

С троки в языке программирования Python – это объекты, которые состоят из последовательности символов. Наравне с bool, int и прочих, работа со строковым типом данных является неотъемлемой частью программирования, так как очень редко встречаются приложения, в которых не используется текст.

Вводная информация о строках

Как и во многих других языках программирования, в Python есть большая коллекция функций, операторов и методов, позволяющих работать со строковым типом.

Что представляют собой строки в Python

С точки зрения Питона, строка – это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста.

Поэтому тип данных string используется в случае, когда что-то нужно представить в текстовой форме.

Литералы строк

Литерал – способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:

>>> ‘string’ # одинарные кавычки ‘string’ >>> «string» # двойные кавычки ‘string’ >>> «»»string»»» ‘string’ >>> »’string»’ ‘string’

Если внутри строки необходимо расположить двойные кавычки, и сама строка была создана с помощью двойных кавычек, можно сделать следующее:

>>> ‘book «war and peace»‘ # разный тип кавычек ‘book «war and peace»‘ >>> «book ‘war and peace'» # разный тип кавычек «book ‘war and peace'» >>> «book \»war and peace\»» # экранирование кавычек одного типа ‘book «war and peace»‘ >>> ‘book \’war and peace\» # экранирование кавычек одного типа «book ‘war and peace'»

💡 Разницы между строками с одинарными и двойными кавычками нет – это одно и то же

Какие кавычки использовать – решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек – обратная косая черта в строке ухудшает читаемость кода.

Кодировка строк

В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.

В Python 3 кодировка по умолчанию исходного кода – UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:

Максимальная длина строки в Python

Максимальная длина строки зависит от платформы. Обычно это:

>>> import sys >>> sys.maxsize 2147483647

Перенос строк

Перенос строки осуществляется с помощью символа \n :

>>> text = «one\ntwo\nthree» >>> print(text) one two three

Конкатенация строк

>>> s1 = «Hello» + » world» >>> s2 = » world» >>> s1+s2 ‘Hello world’

При необходимости объединения строки с числом его предварительно нужно привести тоже к строке, используя функцию str() :

>>> name = «John» >>> age = 30 >>> «Name: » + name + «, age: » + str(age) ‘Name: John, age: 30’

Сравнение строк

При сравнении нескольких строк рассматриваются отдельные символы и их регистр:

При этом сравниваются по очереди первые символы, затем – 2-е и так далее.

>>> s1 = «1a» >>> s2 = «aa» >>> s3 = «Aa» >>> s4 = «ba» >>> «1a» > «aa» # сравнение цифры с буквой False >>> «aa» > «Aa» # сравнение регистров True >>> «aa» > «ba» # сравнение букв по алфавитному порядку False >>> «aa»

Далеко не всегда желательной является зависимость от регистра, в таком случае можно привести обе строки к одному и тому же регистру. Для этого используются функции lower() – для приведения к нижнему и upper() – к верхнему:

>>> s1 = «Intel» >>> s2 = «intel» >>> s1 == s2 False >>> s1.lower() == s2.lower() True

Пустая строка Python

Объявить пустую строку можно следующими способами:

Как удалить строку в Python

Или перезаписать переменную пустой строкой:

Обращение по индексу

Для выбора определенного символа из строки можно воспользоваться обращением по индексу, записав его в квадратных скобках:

>>> s = «abcdef» >>> s[0] ‘a’ >>> s[2] ‘c’

Индекс начинается с 0

В Python предусмотрена возможность получить доступ и по отрицательному индексу. В таком случае отсчет будет вестись от конца строки:

Форматирование строк

Часто возникает ситуация, когда необходимо создать строку, подставив в нее определенные значения, полученные во время выполнения программы. Подстановка данных в таком случае выполняется при помощи форматирования строк, сделать это можно несколькими способами.

Оператор %

Строки в Python обладают встроенной операцией, к которой можно получить доступ оператором %, что дает возможность очень просто делать форматирование. Самый простой пример – когда для подстановки нужен только один аргумент, значением будет он сам:

>>> name = «Alex» >>> ‘Hello, %s’ % name ‘Hello, Alex’

Если же для подстановки используется несколько аргументов, то значением будет кортеж со строками:

>>> ‘%d %s, %d %s’ % (6, ‘bananas’, 10, ‘lemons’) ‘6 bananas, 10 lemons’

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

Такой способ форматирования строк называет «старым» стилем, который в Python 3 был заменен на более удобные способы.

str.format()

>>> print(‘<>‘.format(100)) 100 >>> ‘<0>, <1>, <2>‘.format(‘one’, ‘two’, ‘three’) ‘one, two, three’ >>> ‘<2>, <1>, <0>‘.format(‘one’, ‘two’, ‘three’) ‘three, two, one’

💭 В Python 3 форматирование строк с использованием «нового стиля» является более предпочтительным по сравнению с использованием %-стиля, так как предоставляет более широкие возможности, не усложняя простые варианты использования.

f-строки (Python 3.6+)

В Python версии 3.6 появился новый метод форматирования строк – «f-строки», с его помощью можно использовать встроенные выражения внутри строк:

>>> name = ‘Alex’ >>> f’Hello, !’ ‘Hello, Alex!’

Такой способ форматирования очень мощный, так как дает возможность встраивать выражения:

>>> a = 5 >>> b = 10 >>> f’Five plus ten is and not <2 * (a + b)>.’ ‘Five plus ten is 15 and not 30.’

Таким образом, форматирование с помощью f-строк напоминает использование метода format(), но более гибкое, быстрое и читабельное.

Стандартная библиотека Template Strings

Функции для работы со строками

Для работы со строками в Питоне предусмотрены специальные функции. Рассмотрим их:

Преобразование числового или другого типа к строке:

Методы для работы со строками

Кроме функций, для работы со строками есть немало методов:

>>> text = «Wikipedia is a Python library that makes it easy to access and parse data from Wikipedia» >>> text.find(«Wikipedia») 0 >>> text.rfind(«Wikipedia») 79 >>> text.replace(«from Wikipedia», «from https://www.wikipedia.org/») ‘Wikipedia is a Python library that makes it easy to access and parse data from https://www.wikipedia.org/’ >>> text.split(» «) [‘Wikipedia’, ‘is’, ‘a’, ‘Python’, ‘library’, ‘that’, ‘makes’, ‘it’, ‘easy’, ‘to’, ‘access’, ‘and’, ‘parse’, ‘data’, ‘from’, ‘Wikipedia’] split_text = text.split(» «) >>> «_».join(split_text) ‘Wikipedia_is_a_Python_library_that_makes_it_easy_to_access_and_parse_data_from_Wikipedia’ >>> text = » test » >>> text.strip() ‘test’ >>> text.lstrip() ‘test ‘ >>> text.rstrip() ‘ test’ >>> text = «Python is a product of the Python Software Foundation» >>> text.lower() ‘python is a product of the python software foundation’ >>> text.upper() ‘PYTHON IS A PRODUCT OF THE PYTHON SOFTWARE FOUNDATION’ >>> text = «python is a product of the python software foundation» >>> text.capitalize() ‘Python is a product of the python software foundation’

Преобразование из строки в другой тип

В Питоне строки можно преобразовывать в другие типы данных:

string to int

Функция int() преобразовывает целое число в десятичной системе, заданное как строка, в тип int:

При необходимости можно указывать систему счисления:

>>> int(«0x12F», base=16) 303

string to list

Самый простой способ преобразования строки в список строк – метод split():

>>> ‘one two three four’.split() [‘one’, ‘two’, ‘three’, ‘four’]

При необходимости можно указывать разделитель:

>>> ‘one, two, three, four’.split(‘,’) [‘one’, ‘ two’, ‘ three’, ‘ four’]

string to bytes

Преобразование строкового типа в байтовый выполняется функцией encode() с указанием кодировки:

string to datetime

Строка в дату преобразовывается функцией strptime() из стандартного модуля datetime:

>>> from datetime import datetime >>> print(datetime.strptime(‘Jan 1 2020 1:33PM’, ‘%b %d %Y %I:%M%p’)) 2020-01-01 13:33:00

string to float

Для преобразования строки в число с плавающей точкой используется стандартная функция float:

string to dict

Создание словаря из строки возможно, если внутри нее данные в формате json. Для этого можно воспользоваться модулем json :

string to json

Конвертация объектов Python в объект json выполняется функцией dumps():

>>> import json >>> json.dumps(«hello») ‘»hello»‘

Best practices

Как разбить строку на символы

Разбиение строки на отдельные символы выполняется несколькими способами:

>>> text = «django» # вариант 1 >>> list(text) [‘d’, ‘j’, ‘a’, ‘n’, ‘g’, ‘o’] # вариант 2 >>> [c for c in «text»] [‘t’, ‘e’, ‘x’, ‘t’] # вариант 3 >>> for c in text: print(c) d j a n g o

Как из строки выделить числа

Для извлечения чисел из строки можно воспользоваться методами строк:

>>> str = «h3110 23 cat 444.4 rabbit 11 2 dog» >>> [int(s) for s in str.split() if s.isdigit()] [23, 11, 2]

Данный пример извлекает только целые положительные числа. Более универсальный вариант – регулярные выражения:

>>> str = «h3110 23 cat 444.4 rabbit 11 2 dog» >>> import re >>> re.findall(r’\d+’, str) [‘3110′, ’23’, ‘444’, ‘4’, ’11’, ‘2’]

Как перевернуть строку

Существует несколько способов перевернуть строку, начиная от классического – запустить цикл в обратной последовательности, выбирая каждый символ с конца и вставляя его в новую строку, и заканчивая срезами – вариант только для Питона.

С помощью среза – самый быстрый способ:

Использование reversed() и str.join() :

Как удалить последний символ в строке

Как и в предыдущем случае – чтобы убрать последний символ наиболее простым и быстрым вариантом будет использование среза:

>>> «Some text1″[:-1] ‘Some text’

Как убрать пробелы из строки

В случае удаления пробелов со строки может быть два варианта:

1. Обрезать строку так, чтобы удалить с нее первый и последний пробел, такой вариант может пригодиться, когда пользователь случайно поставит пробел в конце введенного текста:

>>> » Some text «.strip() ‘Some text’

2. Удалить со строки все пробелы:

>>> » So me t e x t «.replace(‘ ‘, ») ‘Sometext’

Работа со строками – неотъемлемая часть создания практически любого приложения, где используется текст, и язык программирования Python предоставляет широкие возможности работы с такими данными.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *