如何使用Python 2.7找到相关信息并将其拆分为csv表?

时间:2017-06-21 07:20:39

标签: python xml text split

我正在使用Python 2.7。 我有一个txt文件,其中包含来自网站的HTML代码。 (不,我不能网页抓取,我必须使用这个txt文件。)

所以,我想从这个页面拆分一个部分,然后发送到xml文件。 我想分开这部分:



<TR>
  <td>&nbsp;</td>
  <TD class="contentdot" WIDTH="80">&nbsp;</TD>
  <TD class="contentword">
    <TABLE BORDER="0" ID="pm" CLASS="tab6col">
      <TR>
        <TD>&nbsp;</TD>
        <TD class="contentword" align="right">
          <B>2015. év</B>
        </TD>
        <TD class="contentword" align="right">
          <B>2014. év</B>
        </TD>
        <TD class="contentword" align="right">
          <B>2013. év</B>
        </TD>
        <TD class="contentword" align="right">
          <B>2012. év</B>
        </TD>
        <TD class="contentword" align="right">
          <B>2011. év</B>
        </TD>
      </TR>
      <TR>
        <TD class="contentword">
          <B>Beszámolási időszak</B>
        </TD>
        <TD class="contentword" align="right"><span class="pm_idoszak">2015.01.01. - 2015.12.31.</span></TD>
        <TD class="contentword" align="right"><span class="pm_idoszak">2014.01.01. - 2014.12.31.</span></TD>
        <TD class="contentword" align="right"><span class="pm_idoszak">2013.12.30. - 2013.12.31.</span></TD>
        <TD class="contentword" align="right"><span class="pm_idoszak">Nincs adat.</span></TD>
        <TD class="contentword" align="right"><span class="pm_idoszak">Nincs adat.</span></TD>
      </TR>
      <TR>
        <TD>&nbsp;</TD>
        <TD class="contentword" align="right">eFt</TD>
        <TD class="contentword" align="right">eFt</TD>
        <TD class="contentword" align="right">eFt</TD>
        <TD class="contentword" align="right">eFt</TD>
        <TD class="contentword" align="right">eFt</TD>
      </TR>
      <TR>
        <TD class="contentword">Értékesítés nettó árbevétele</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Bevételek</TD>
        <TD class="numberc" align="right">2 873 821</TD>
        <TD class="numberc" align="right">3 162 742</TD>
        <TD class="numberc" align="right">9 194</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
      </TR>
      <TR>
        <TD class="contentword">Üzemi eredmény</TD>
        <TD class="numberc" align="right">81 937</TD>
        <TD class="numberc" align="right">-181 850</TD>
        <TD class="numberc" align="right">1 755</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Adózás előtti eredmény</TD>
        <TD class="numberc" align="right">-192 778</TD>
        <TD class="numberc" align="right">-169 476</TD>
        <TD class="numberc" align="right">1 755</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Mérleg szerinti eredmény</TD>
        <TD class="numberc" align="right">-124 099</TD>
        <TD class="numberc" align="right">0</TD>
        <TD class="numberc" align="right">1 421</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Adózott eredmény</TD>
        <TD class="numberc" align="right">-192 778</TD>
        <TD class="numberc" align="right">-169 476</TD>
        <TD class="numberc" align="right">1 579</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Eszközök összesen</TD>
        <TD class="numberc" align="right">37 820 881</TD>
        <TD class="numberc" align="right">40 695 842</TD>
        <TD class="numberc" align="right">36 992 091</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Befektetett eszközök</TD>
        <TD class="numberc" align="right">18 668 826</TD>
        <TD class="numberc" align="right">18 525 063</TD>
        <TD class="numberc" align="right">16 925 711</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Forgóeszközök</TD>
        <TD class="numberc" align="right">19 008 587</TD>
        <TD class="numberc" align="right">21 877 275</TD>
        <TD class="numberc" align="right">19 792 420</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Pénzeszközök</TD>
        <TD class="numberc" align="right">947 015</TD>
        <TD class="numberc" align="right">1 056 101</TD>
        <TD class="numberc" align="right">1 307 515</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Aktív időbeli elhatárolások</TD>
        <TD class="numberc" align="right">143 468</TD>
        <TD class="numberc" align="right">293 504</TD>
        <TD class="numberc" align="right">273 960</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Saját tőke</TD>
        <TD class="numberc" align="right">2 141 319</TD>
        <TD class="numberc" align="right">2 184 079</TD>
        <TD class="numberc" align="right">2 353 554</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Céltartalékok</TD>
        <TD class="numberc" align="right">29 656</TD>
        <TD class="numberc" align="right">148 652</TD>
        <TD class="numberc" align="right">18 960</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Kötelezettségek</TD>
        <TD class="numberc" align="right">35 541 531</TD>
        <TD class="numberc" align="right">38 059 399</TD>
        <TD class="numberc" align="right">34 233 518</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Rövid lejáratú kötelezettségek</TD>
        <TD class="numberc" align="right">30 519 491</TD>
        <TD class="numberc" align="right">30 426 014</TD>
        <TD class="numberc" align="right">26 394 088</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Hosszú lejáratú kötelezettségek</TD>
        <TD class="numberc" align="right">5 022 040</TD>
        <TD class="numberc" align="right">7 633 385</TD>
        <TD class="numberc" align="right">7 839 430</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Passzív időbeli elhatárolások</TD>
        <TD class="numberc" align="right">108 375</TD>
        <TD class="numberc" align="right">303 712</TD>
        <TD class="numberc" align="right">386 059</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword" colspan="6">
          <B>Pénzügyi mutatók</B>
        </TD>
      </TR>
      <TR>
        <TD class="contentword">Eladósodottság foka <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Eladósodottság foka&lt;/span&gt; (Kötelezettségek/Eszközök összesen)&lt;br&gt;&lt;i&gt;Megmutatja, hogy az eszköz állomány milyen mértékben van megterhelve kötelezettségvállalással. Minél kisebb a mutató értéke, annál jobb a cég megítélése.&lt;/i&gt;');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Eladósodottság mértéke - Bonitás <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Eladósodottság mértéke - Bonitás&lt;/span&gt; (Kötelezettségek/Saját tőke)&lt;br&gt;&lt;i&gt;Azt mutatja, hogy a saját források a kötelezettségek hány százalékát fedezik. Pozitív a cég megítélése, ha a mutató értéke tartósan (jóval) 1 alatt van.&lt;/i&gt;');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Árbevétel arányos eredmény % <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Árbevétel arányos eredmény %&lt;/span&gt; (Adózott eredmény/ Nettó árbevétel)&times;100&lt;br&gt;&lt;i&gt;A mutató az árbevétel hatékonyságát fejezi ki úgy, hogy az árbevétel nyereségtartalmát százalékban szemlélteti. A cég megítélése annál pozitívabb, minél magasabb a százalék.&lt;/i&gt;');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Likviditási gyorsráta <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Likviditási gyorsráta&lt;/span&gt; ((Forgóeszközök-Készletek)/Rövid lej.kötelezettségek)&lt;br&gt;&lt;i&gt;Azt fejezi ki, hogy az egy év alatt pénzzé tehető készletek nélküli forgóeszközök milyen arányban képesek az egy éven belül esedékes kötelezettségek fedezésére, azaz milyen a cég rövid távú fizetőképessége.&lt;br&gt;A cég megítélése akkor pozitív, ha ez az arány egyre növekvő, ami az azonnali fizetőképesség javulását jelzi.&lt;/i&gt;');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
        <TD class="numberc" align="right">Nincs adat.</TD>
      </TR>
      <TR>
        <TD class="contentword">Saját tőke aránya <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Saját tőke aránya &lt;/span&gt; (Saját tőke / Források)');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right">0,06</TD>
        <TD class="numberc" align="right">0,05</TD>
        <TD class="numberc" align="right">0,06</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
      </TR>
      <TR>
        <TD class="contentword">Eszközarányos nyereség <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Eszközarányos nyereség &lt;/span&gt; (Adózott eredmény / Eszközök)');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right">-0,01</TD>
        <TD class="numberc" align="right">0,00</TD>
        <TD class="numberc" align="right">0,00</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
      </TR>
      <TR>
        <TD class="contentword">Bevételarányos eredmény <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Bevételarányos eredmény &lt;/span&gt; (Adózott eredmény / Bevételek)');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right">-0,07</TD>
        <TD class="numberc" align="right">-0,05</TD>
        <TD class="numberc" align="right">0,17</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
      </TR>
      <TR>
        <TD class="contentword">Saját tőke arányos nyereség <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Saját tőke arányos nyereség &lt;/span&gt; (Adózott eredmény / Saját tőke)');"
            onmouseout="remove_hint();">&#105;</span></TD>
        <TD class="numberc" align="right">-0,09</TD>
        <TD class="numberc" align="right">-0,08</TD>
        <TD class="numberc" align="right">0,00</TD>
        <TD class="numberc" align="right"></TD>
        <TD class="numberc" align="right"></TD>
      </TR>
      <TR>
        <TD class="contentword" colspan="6">
          <B>Létszám:</B> &nbsp; 136 fő</TD>
      </TR>
    </TABLE>
    <!-- 1 -->
&#13;
&#13;
&#13;

这是六列,并且很多行。 我怎样才能将这些信息分成细胞?

我试过这个:

&#13;
&#13;
import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd

filename=r'output.csv'

resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')

f = open('opten2.txt', 'r')
x = f.readlines()

datatable=[]
for record in x.findAll('tr'):
    for data in record.findAll('td'):
        datatable.append(data.text)
maindatatable = to_2d(datatable, 6)

output.writerows(maindatatable)

resultcsv.close()
&#13;
&#13;
&#13;

但是这个txt中有一个tr和td的lof,我怎么能把这个分成我想要的? (我上面发布的内容)如何修复我的代码才能成功运行? (我现在才开始编码。^^)

2 个答案:

答案 0 :(得分:1)

您可以使用BeautifulSoup并使用类{ "class" : "tab6col" }调用findAll,如下所示:

import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
from bs4 import BeautifulSoup

def to_2d(l,n):
    return [l[i:i+n] for i in range(0, len(l), n)]

filename=r'output.csv'

resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')

f = open('f.xml', 'r')
x = f.read()

soup = BeautifulSoup(x)

tab6col = soup.findAll('table', { "class" : "tab6col" })

datatable=[]
for record in tab6col[0].findAll('tr'):
    for data in record.findAll('td'):
        datatable.append(data.text.encode('utf-8').decode('latin-1'))

maindatatable = to_2d(datatable, 6)
print maindatatable
output.writerows(maindatatable)

resultcsv.close()

答案 1 :(得分:0)

你实际上在进行 html解析。我建议使用html解析库,例如the built-in one。这应该比你自己做的更容易,更健壮。