解析复杂的文本文件

时间:2013-02-11 14:34:39

标签: python python-3.x

savetonotherfile.write(
        openfileagain.read().replace(
            "b'<HTML>\n<HEAD>\n<TITLE> Euro Millions Winning Numbers</TITLE>\n<BODY>\n<PRE> Euro Millions Winning Numbers\n\nNo., Day,DD,MMM,YYYY, N1,N2,N3,N4,N5,L1,L2,  Jackpot,   Wins\n",
            '').replace(
            "\n<HR><B>All lotteries below have exceeded the 180 days expiry date</B><HR>No., Day,DD,MMM,YYYY, N1,N2,N3,N4,N5,L1,L2,  Jackpot,   Wins\n",
            '').replace(
            "\n\nThis page shows all the draws that used any machine and any ball set in any year.\n\nData obtained from http://lottery.merseyworld.com/Euro/\n</PRE>\n</BODY></HTML>\n'",
            ''))

我正在尝试使用上面的行从格式的文本文件中删除文本 b'<HTML>\n<HEAD>\n<TITLE> Euro Millions Winning Numbers</TITLE>\n<BODY>\n<PRE> Euro Millions Winning Numbers\n\nNo., Day,DD,MMM,YYYY, N1,N2,N3,N4,N5,L1,L2, Jackpot, Wins\n562, Fri, 8,Feb,2013, 09,11,14,34,44,10,11, 27886637, 0\n561, Tue, 5,Feb,2013, 06,25,31,40,45,06,07, 19070109, 0\n560, Fri, 1,Feb,2013, ...删除一些文本,删除更多数字,删除一些文本。 .replace()没有做任何事情,或者至少写入写文件的内容与读取文件相同。我做错了什么?我还想在日期之后删除逗号后面的长整数和后续文本,但是还没有开始那个障碍,因为我甚至无法完成最简单的事情!

3 个答案:

答案 0 :(得分:0)

r的第一个参数中的字符串文字之前添加replace。或者将\n更改为\\n

答案 1 :(得分:0)

尝试使用这样的html并不是一个好主意 - 通常最好使用html解析模块,例如beautifulsoup(假设是html - 请参阅下面的编辑)。无论哪种方式,如果您将代码分解为更小的步骤,并且将长代码字符串分解出来,您将能够更轻松地找到错误。 E.g:

replace_map = (('first string', 'replace with this'),
               ('second string', 'replace the second with this'))

with open(inputfilename, 'rt') as infile:
    output = infile.read()
    for fromstr, tostr in replace_map:
        output = output.replace(fromstr, tostr)

with open(outputfilename, 'wt') as outfile:
    outfile.write(output)

修改:在发布我的回答后,我注意到您似乎正在解析表单"b'<html code/>'"的文本这是正确的吗?看起来你有一个描述python bytes对象的字符串。如果这真的是你正在做的事情,那么html解析对你没有帮助,但我建议你认真质疑你为什么这样做并决定它是否是达到最终结果的最佳方式。

答案 2 :(得分:0)

对于文本的复杂操作,证据是必须使用正则表达式 我劝你学习re模块。与修补 replace()

相比,您将获得更多满足感

关于您提供的代码,执行会这样做:
- 获取处理程序openfileagain文件中的文本:创建字符串#1
- 替换此文本的一部分,该字符串#1的id est:创建一个新的字符串#2
- 替换文本的第二部分,也就是说替换字符串#2中存在的所述部分:创建第三个字符串#3
- 替换第三部分,也就是说替换字符串#3中存在的这部分:创建字符串#4。

使用正则表达式时,您将提供包含要替换的3个部分的信息, re 机器将直接从字符串#1创建相同的字符串#4,而不必通过通过字符串#2和#3。