2014-02-06 76 views
3

上週之前,我對Python的使用經驗非常有限,因爲我們的網絡上的大型數據庫文件非常有限,突然之間我被迫進入嘗試從html表格中提取信息的世界。python lxml xpath返回帶文本的列表中的轉義字符

經過大量閱讀後,我選擇使用Python 2.7的lxml和xpath來檢索有問題的數據。

xpath = "//table[@id='resultsTbl1']/tr[position()>1]/td[@id='row_0_partNumber']/child::text()" 

這產生了以下列表::我已用下面的代碼檢索一個場

['\r\n\t\tBAR18FILM/BKN', '\r\n\t\t\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t', '\r\n\t\t\t\r\n\t\t'] 

我確認的CR/LF和標籤轉義字符,我想知道如何避免它們?

回答

0

這些字符是XML文檔的一部分,這就是它們被返回的原因。你無法避免它們,但你可以將它們去除。你可以把每個項目.strip()方法返回:

results = [x.strip() for x in results] 

這會剝奪開頭和結尾的空白。沒有看到你的實際代碼和數據,很難給出一個好的答案。

例如,假設這個腳本:

#!/usr/bin/python 

from lxml import etree 

with open('data.xml') as fd: 
    doc = etree.parse(fd) 

results = doc.xpath(
    "//table[@id='results']/tr[position()>1]/td/child::text()") 

print 'Before stripping' 
print repr(results) 

print 'After stripping' 
results = [x.strip() for x in results] 
print repr(results) 

而這個數據:

<doc> 
    <table id="results"> 
    <tr> 
     <th>ID</th><th>Name</th><th>Description</th> 
    </tr> 

    <tr> 
     <td> 
     1 
     </td> 
     <td> 
     Bob 
     </td> 
     <td> 
     A person 
     </td> 
     </tr> 
    <tr> 
     <td> 
     2 
     </td> 
     <td> 
     Alice 
     </td> 
     <td> 
     Another person 
     </td> 
    </tr> 
    </table> 
</doc> 

我們得到這些結果:

Before stripping 
['\n\t\t\t1\n\t\t\t', '\n\t\t\tBob\n\t\t\t', '\n\t\t\tA person\n\t\t\t', '\n\t\t\t2\n\t\t\t', '\n\t\t\tAlice\n\t\t\t', '\n\t\t\tAnother person\n\t\t\t'] 
After stripping 
['1', 'Bob', 'A person', '2', 'Alice', 'Another person']