Вы не можете разобрать HTML-код [X] с регулярным выражением. Поскольку HTML не может быть проанализирован с помощью регулярных выражений. Regex не является инструментом, который можно использовать для правильного анализа HTML. Поскольку я уже много раз отвечал в вопросах HTML-и-regex, использование регулярных выражений не позволит вам потреблять HTML. Регулярные выражения - это инструмент, который недостаточно совершенен для понимания конструкций, используемых HTML. HTML не является регулярным языком и, следовательно, не может быть проанализирован регулярными выражениями. Запросы Regex не имеют возможности разбивать HTML на его значимые части. так много раз, но это не доходит до меня. Даже расширенные нерегулярные регулярные выражения, используемые Perl, не справляются с задачей анализа HTML. Вы никогда не заставите меня взломать. HTML - это язык достаточной сложности, который не может быть проанализирован с помощью регулярных выражений. Даже Джон Скит не может анализировать HTML, используя регулярные выражения. Каждый раз, когда вы пытаетесь проанализировать HTML с регулярными выражениями, нечестивый ребенок плачет кровью девственниц, а русские хакеры выкладывают ваш webapp. Разбор HTML с регулярным выражением вызывает тайные души в царство живых. HTML и регулярное выражение идут вместе, как любовь, брак и ритуал детоубийства. «Центр» не может удерживать слишком поздно. Сила регулярных выражений и HTML вместе в одном и том же концептуальном пространстве уничтожит ваш разум как много водянистую замазку. Если вы анализируете HTML с регулярным выражением, вы даете им и их богохульные способы, которые обрекают нас всех на бесчеловечные труды для Того, чье имя не может быть выражено на Основном многоязычном плане, он приходит. HTML-plus-regexp сжигает n erves разумного, пока вы наблюдаете, ваша психика увядает в натиске ужаса. Основанные на языке Rege̿̔̉x HTML-парсеры - это рак, который убивает StackOverflow, слишком поздно, что слишком поздно мы не можем спасти trangession of child, гарантирует, что регулярное выражение будет потреблять всю живую ткань (за исключением HTML, который он не может, как ранее пророчествовал) дорогой лорд помогите нам, как кто-либо сможет выжить в этом бедствии, используя регулярное выражение для анализа HTML, обрек человечество на вечность страшных пыток и дыр в безопасности, используя регулярное выражение в качестве инструмента для обработки HTML, устанавливает нарушение между этим миром и областью страха сущностных сущностей (например, SGML-сущностей , но более коррумпированный), простое представление о мире reg ex parsers для HTML будет вставлять , тантьё переносить сознание программиста в мир непрестанного крика, он приходит, зловонная слизистая регулярная инфекция wil l пожирайте ваш парсер, приложение и существование в HT ML на все время, например Visual Basic, только хуже, он приходит, не делает h e com̡e̶s, ̕h̵i s неудовлетворительное радианское разрушение все улучшения, HTML-теги lea͠ki̧n͘g fr̶ǫm ̡yo ͟ur eye͢s̸ ̛l̕ik͏e liq uid pain, песня reggular exp ression parsing будет распространять голоса mor tal man из sp здесь я вижу, что вы можете видеть, что это красиво. f inal snuf
пальцы лжи s человека ALL IS LOŚ͖̩͇̗̪̏̈T A LL I SL OST pon̷y он приходит, он c̶̮omes он co mes the ich или пронизывает весь МОЙ ЛИЦ МОЙ ЛИЦО ᵒh god n o NO NOO̼ O ON Θ остановить a * ̶͑̾̾ ̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e
n ot rè̑ͧ̌aͨl̘̝̙ͤ̾̆ ZA̡͊͠͝LGΌ ISͮ҉̯͈͕̹̘ T O͇̹̺Ɲ̴ȳ̳ TH̘ Ë͖̉ ͠P̯͍̭O̚ N̐Y̡ H̸̡̪̯ͨ͊̽̅̾Ȩ̬̩̾͛ͪ̈͘ ̶̧̨̹̭̯ͧ̾ͬC̷̙̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝ S̨̥̫͎̭ͯ̿̔
Вы пробовали использовать синтаксический анализатор XML в stead?
Замечание модератора
Это сообщение заблокировано, чтобы предотвратить нежелательные изменения его содержимого. Сообщение выглядит так, как должно выглядеть - проблем с его содержанием нет. Пожалуйста, не помещайте это для нашего внимания.
blockquote>
В соответствии с документацией вместо
execfile("./filename")
Используйте
exec(open("./filename").read())
См.:
Вот что я имел (file
уже назначен пути к файлу с исходным кодом в обоих примерах):
execfile(file)
Вот что я заменил на него:
exec(compile(open(file).read(), file, 'exec'))
Моя любимая часть: вторая версия отлично работает как в Python 2, так и в 3, то есть нет необходимости добавлять в зависимую от версии логику.
Я просто новичок здесь, поэтому, может быть, это просто удача, если я нашел это:
После попытки запустить скрипт из приглашения интерпретатора >>> с помощью команды
execfile('filename.py')
, для которого я получил «NameError: name« execfile », не определен» Я попробовал очень простой
import filename
, он работал хорошо: -)
Надеюсь, это может быть полезной и поблагодарить всех за отличные подсказки, примеры и все те мастерски прокомментированные фрагменты кода, которые являются большим вдохновением для новичков!
Я использую Ubuntu 16.014 LTS x64. Python 3.5.2 (по умолчанию, 17 ноября 2016, 17:05:23) [GCC 5.4.0 20160609] на linux
Обратите внимание, что приведенный выше шаблон не будет работать, если вы используете объявления кодировки PEP-263, которые не являются ascii или utf-8. Вам нужно найти кодировку данных и правильно закодировать ее перед передачей ее exec ().
class python3Execfile(object):
def _get_file_encoding(self, filename):
with open(filename, 'rb') as fp:
try:
return tokenize.detect_encoding(fp.readline)[0]
except SyntaxError:
return "utf-8"
def my_execfile(filename):
globals['__file__'] = filename
with open(filename, 'r', encoding=self._get_file_encoding(filename)) as fp:
contents = fp.read()
if not contents.endswith("\n"):
# http://bugs.python.org/issue10204
contents += "\n"
exec(contents, globals, globals)
Вы можете написать свою собственную функцию:
def xfile(afile, globalz=None, localz=None):
with open(afile, "r") as fh:
exec(fh.read(), globalz, localz)
Если вам действительно нужно ...
globals
и locals
указывающими на глобальное пространство имен для модуля, содержащего определение execfile()
, а не на глобальное и локальное пространство имен вызывающего. Правильный подход состоит в том, чтобы использовать None
в качестве значения по умолчанию и определять глобальные и локальные объекты вызывающего абонента через возможности интроспекции модуля inspect
.
– Sven Marnach
3 November 2011 в 15:20
exec
является выражением в python2, exec(code)
работает, потому что parens просто игнорируются.
– medmunds
5 March 2013 в 07:25
open("somefile.py")
может быть неверным, если somefile.py
использует кодировку символов, отличную от locale.getpreferredencoding()
. tokenize.open()
можно использовать вместо этого.
– jfs
23 March 2016 в 15:39
Хотя exec(open("filename").read())
часто задается как альтернатива execfile("filename")
, он пропускает довольно много деталей, которые поддерживаются execfile
.
Следующая функция для Python3.x находится как можно ближе получить то же поведение, что и выполнение файла напрямую.
Примечания:
__main__
, некоторые сценарии зависят от этого, чтобы проверить, загружаются ли они как модуль или нет, например. if __name__ == "__main__"
__file__
лучше подходит для сообщений об исключениях, а некоторые скрипты используют __file__
для получения путей к другим файлам по отношению к ним. execfile
делает - поэтому вы можете получить доступ к любым переменным, определяемым путем чтения переменных после запуска. def execfile(filepath, globals=None, locals=None):
if globals is None:
globals = {}
globals.update({
"__file__": filepath,
"__name__": "__main__",
})
with open(filepath, 'rb') as file:
exec(compile(file.read(), filepath, 'exec'), globals, locals)
# execute the file
execfile("/path/to/somefile.py")
Примечание: в отличие от execfile
Python2, это не изменяет текущее пространство имен по умолчанию. Для этого вам нужно явно передать globals()
.
Как недавно , предложенный в списке рассылки python-dev , модуль runpy может оказаться жизнеспособной альтернативой. Цитата из этого сообщения:
https://docs.python.org/3/library/runpy.html#runpy.run_path
import runpy file_globals = runpy.run_path("file.py")
Есть тонкие отличия от
execfile
:
run_path
всегда создает новое пространство имен. Он выполняет код как модуль, поэтому нет никакой разницы между глобальными и локальными (поэтому есть только аргументinit_globals
). Возвращаются глобальные переменные.execfile
, выполняемые в текущем пространстве имен или в указанном пространстве имен. Семантикаlocals
иglobals
, если они были заданы, были схожи с локалями и глобалами внутри определения класса.run_path
может не только выполнять файлы, но также яйца и каталоги (см. документация для деталей).
file_globals
? Это позволило бы сохранить тип file_globals['...']
для каждой переменной.
– Adriaan
17 August 2017 в 08:03
Это лучше, так как он принимает глобальные и локальные от вызывающего:
import sys
def execfile(filename, globals=None, locals=None):
if globals is None:
globals = sys._getframe(1).f_globals
if locals is None:
locals = sys._getframe(1).f_locals
with open(filename, "r") as fh:
exec(fh.read()+"\n", globals, locals)
Кроме того, хотя и не является чистым решением Python, если вы используете IPython (как вам, вероятно, так или иначе), вы можете сделать:
%run /path/to/filename.py
. Это одинаково легко.
Если скрипт, который вы хотите загрузить, находится в том же каталоге, что и тот, который вы запустили, возможно, «импорт» выполнит задание?
Если вам необходимо динамически импортировать код, встроенная функция __ import __ , а модуль imp стоит посмотреть.
>>> import sys
>>> sys.path = ['/path/to/script'] + sys.path
>>> __import__('test')
<module 'test' from '/path/to/script/test.pyc'>
>>> __import__('test').run()
'Hello world!'
test.py:
def run():
return "Hello world!"
Если вы используя Python 3.1 или более позднюю версию, вы также должны взглянуть на importlib .
найдите маршрут установки вашей папки (у меня она есть в C: \ python34), а затем выполните на регулярной CMD-оболочке
set path=%path%;c:\python34
сейчас, когда вы инициализируете оболочку, переходите к C: \ python34 \ myscripts и используйте классическую команду
python filename.py
close
обработать этот файл. Еще одна причина не любить изменение от python 2. – Rebs 19 October 2015 в 05:02