limodou大侠请进

limodou大侠请进

上次问过您的那个字符串问题,见到真实资料了,发现情况没有我问您那么简单,所以我决定从html处理,中间有个问题还得麻烦您:
原文件:

[Copy to clipboard] [ - ]
CODE:
<p>【哀荣】<span lang=EN-US> āiróng 〈书 <i>fml.</i>〉指死后的荣誉posthumous honour</span></p>
<p>【哀求】<span lang=EN-US> āiqiú 哀告请求entreat; implore:~饶命plead for mercy|苦苦~implore piteously</span></p>
<p>【挨边】<span lang=EN-US> āi∥biān (~儿 āi∥biānr) <ultr>a34d</ultr> 靠着边缘keep close to the edge:上了大路,要挨着边儿走。Keep close to the side when walking on the road. <ultr>a34e</ultr> 接近(某数,多指年龄) be near; be close to (a figure, usu. age):我六十~儿了。I'm getting on sixty. <ultr>a34f</ultr> 接近事实或事物应有的样子be close to the truth of sth.; be relevant:你说的一点也不~儿! What you have said is totally irrelevant.</span></p>

上次您写的那个程序,处理拼音是把所有汉语拼音写在一个列表,可真实的情况是:文件的汉语拼音并不标准,里面夹杂着英文字母,所以这个方法似乎不行,拼音开始已基本确定,我想从拼音结束的位置找规律,大致就上面几种情况,要么是' 〈'或者括号等,要么就是汉字,但是我不知道怎么去区分汉字,因为其中的汉语拼音也有双字节的。不知道有什么办法没有,谢谢了!
我觉得你所说的情况很复杂,这其实与python无关,而是一个算法的问题。比如你举的第三个例子:

[Copy to clipboard] [ - ]
CODE:
<p>【挨边】<span lang=EN-US> āi∥biān (~儿 āi∥biānr) <ultr>a34d</ultr>

拼音后面还有拼音,这怎么区分。我想首先要确定算法,把所有的情况都考虑到。然后才能去写程序。
我对limodou提另一个问题.
看了你的《[Python学习]使用minidom来处理XML的示例(二)--XML的写入》后,有一处不明白。

[Copy to clipboard] [ - ]
CODE:
1       >>> import xml.dom.minidom
2       >>> impl = xml.dom.minidom.getDOMImplementation()
3       >>> dom = impl.createDocument(None, 'catalog', None)
4       >>> root = dom.documentElement
5       >>> text = unicode('汉字示例', 'cp936')
6       >>> item = makeEasyTag(dom, 'item', text)
7       >>> root.appendChild(item)
8       <DOM Element: item at 0xb9ceb8>
9       >>> root.toxml()
10      u'<catalog><item>\u6c49\u5b57\u793a\u4f8b</item></catalog>'
11      >>> f=file('d:/test.xml', 'w')
12      >>> import codecs
13      >>> writer = codecs.lookup('utf-8')[3](f)
14      >>> dom.writexml(writer, encoding='utf-8')
15      >>> writer.close()

请问这颗XML在写入文件后,是否一直存在内存里?如果是,如何从内存清除掉?
不用的对象可以使用 v=None 或 del 来去掉它的引用计数。python会自动回收。一般小程序结束后自动就回收了,可以不用管它。
limodou大侠:前面的数据我已基本格式化了,现在有个问题:

[Copy to clipboard] [ - ]
CODE:
1.用电报陈述(事由) state via telegraph:谈判一有结果,迅即~。Report the result of the negotiation via telegraph as soon as it's out.
2〈方 <i>dial.</i>〉汽艇motorboat
3.(~儿diàndēnɡpàor)白炽电灯上用的发光器件,一般呈梨形electric (light) bulb, usu. shaped like a pear;

现在我想在里面的英文加上标记:

[Copy to clipboard] [ - ]
CODE:
1.用电报陈述(事由) <eng>state via telegraph</eng>:谈判一有结果,迅即~。Report the result of the negotiation via telegraph as soon as it's out.
2〈方 <i>dial.</i>〉汽艇<eng>motorboat</eng>
3.(~儿diàndēnɡpàor)白炽电灯上用的发光器件,一般呈梨形<eng>electric (light) bulb, usu. shaped like a pear;</eng>

但其中()、〈〉、<>里面的英文不要加,该怎么做比较好?谢谢!

因为(),<>都是成对出现,因此可以象处理[]一样,读到一个(,<就一直读,直到遇到),>结束即可。


QUOTE:
原帖由 limodou 于 2006-3-24 19:22 发表
因为(),<>都是成对出现,因此可以象处理[]一样,读到一个(,<就一直读,直到遇到),>结束即可。

有个全角的〈〉也是特殊情况,于是我这样做的:

[Copy to clipboard] [ - ]
CODE:
          #全角的〈是双字节的,第一个字节是161,第二个是180
            if ord(temp[m])==161 and ord(temp[m+1])== 180 and lw4_flag == 0:
                lw4_flag = 1
                buf.append('〈')  # 或者buf.append(temp[m:m+1])结果一样
                m += 2

可结果出现了乱码,由于不是用Unicode,所以只能这样子。
原文这样子:

[Copy to clipboard] [ - ]
CODE:
ān 〈书 <i>fml.</i>〉〈疑问代词 <i>interrog.pron.</i>〉

执行后变成了

[Copy to clipboard] [ - ]
CODE:
ān </py><chi>词?<i>fml.</i>〉銆堃晌蚀??<i>interrog.pron.</i>銆?

应该是字节错位了,但是是哪里呢?
看不了什么问题,加些调试信息看一看吧。