使用Python从文本文件中删除html格式“>”csv.reader
我有一个文本文件;用作分隔符。问题在于它有一些html文本格式,例如>
显然,在这导致问题。 文本文件很大,我没有这些html字符串的列表,也就是有很多不同的例子,例如$amp;
。我如何使用python删除它们。 该文件是一个名称,地址,电话号码和几个领域的列表。我要找的crap.html.remove(文本文件)模块使用Python从文本文件中删除html格式“>”csv.reader
最快的方法可能是使用无证,但到目前为止稳定unescape
方法HTMLParser:
import HTMLParser
s= HTMLParser.HTMLParser().unescape(s)
注意这将必然输出一个Unicode字符串,因此,如果您有任何非ASCII字节有你首先需要s.decode(encoding)
。
+1不错的快速入侵 – whatnick 2009-10-28 14:22:02
看看代码从here:
import re, htmlentitydefs
##
# Removes HTML or XML character references and entities from a text string.
#
# @param text The HTML (or XML) source text.
# @return The plain text, as a Unicode string, if necessary.
def unescape(text):
def fixup(m):
text = m.group(0)
if text[:2] == "&#":
# character reference
try:
if text[:3] == "&#x":
return unichr(int(text[3:-1], 16))
else:
return unichr(int(text[2:-1]))
except (ValueError, OverflowError):
pass
else:
# named entity
try:
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
except KeyError:
pass
return text # leave as is
return re.sub("&#?\w+;", fixup, text)
当然,这个只需要HTML实体的照顾。文本中可能还有其他分号与CSV解析器混淆在一起。但我猜你已经知道了...
UPDATE:追加可能的追加OverflowError
。
我得到一个错误 /用户/ VMD/Dropbox的/营销材料/信息/ formatleaddata.py在removehtml(文本) 40通 41回文本#保留原样 ---> 42返回应用re.sub(” ?\w+; “,fixup,text) /Library/Frameworks/Python.framework/Versions/5.1.0/lib/python2.5/re.pyc in sub(pattern,repl,string,count) 如果可调用,它是通过匹配对象和必须返回 149替换串中使用 “”” - > 150返回_compile(图案,0).SUB(REPL,串,计数) 152 DEF指SUBn(图案,repl时,串,数= 0): – Vincent 2009-10-28 16:37:23
这是一个相当拗口,这是我不太清楚是什么错误你有一个电子。 xception类型?也许你应该尝试在一个单独的答案可以发布您的异常细节,只是让我们能有正确的格式。 – itsadok 2009-10-29 07:57:27
在大多数Unix系统(包括在Mac OS X),你可以重新编码和输入文本文件:
recode html.. file_with_html.txt
这将替换& GT;通过“>”等。
例如,您可以通过Python的子流程模块调用它。
它将主要由&,<,>组成。不会只是找到和替换足够?也许你可以创建一个元组列表http://htmlhelp.com/reference/html40/entities/special.html并使用lambda函数来查找替换它的文件。 – Jaskirat 2009-10-28 13:40:31