在Python中拆分时循环一行

时间:2014-01-06 11:59:36

标签: python split

我在文件中有一个大行。我试图从某个特定的行中取出一些数据。

例如,文件的第107行:

<test>H</test><test>E</test><test>L</test><test>L</test><test>O</test>

我怎么能把它分开X次直到行的结尾,所以它返回

H
E
L
L
O

但不使用解析器。

我一直在努力将文件分成行,但我只能循环一次,直到找到要拆分的第一部分。如何让它继续通过线分裂?

matches = open('file.html', 'r')

for line in matches:
    test = line.split("<test")
    with open ('test.txt', 'a') as file:
        file.write(test[0].split("\">")[-1] + "\n")

matches.close()

2 个答案:

答案 0 :(得分:5)

考虑使用HTML解析器,例如BeautifulSoup。它将使工作变得更加容易,并且它是为这样的设计而设计的:

>>> from bs4 import BeautifulSoup as BS
>>> s = "<test>H</test><test>E</test><test>L</test><test>L</test><test>O</test>"
>>> soup = BS(s)
>>> for i in soup.find_all('test'):
...     print i.text
... 
H
E
L
L
O

此外,每次循环file.html文件中的一行时,您都会打开文件。您应该在for循环之外打开with语句。这可能会解决您的问题,因为您目前正在重写同一行(因为您在第一行打开文件,然后重写,然后关闭文件,然后重复)。

答案 1 :(得分:0)

你也可以尝试使用正则表达式。这是一个简单的python解决方案

import re
def strip_html(text):
    p = re.compile(r'<.*?>')
    return p.sub('', text)