Autor wpisu: sokzzuka, dodany: 17.06.2010 22:51, tagi: php
W poprzednich częściach tutorialu omawiałem jak stworzyć szkielet aplikacji webowej w Pythonie przy użyciu mod_wsgi oraz jak wykonywać proste operacje na bazie (select, insert). Dzisiejszy wpis będzie o odczytywaniu informacji z plików w popularnych formatach XML i CSV.
Jak zaraz zobaczycie w obu językach wygląda to podobnie, najpierw parsowanie CSV w Pythonie oraz wyświetlanie HTML-owej tabelki:
import csv def test(path): sFile = path + 'files/sample.csv' oReader = csv.reader(open(sFile), delimiter=',', quotechar='"') aResult = [] for row in oReader: aResult.append(row) sResult = '<table><tbody>' for row in aResult: sResult += '<tr>' for cell in row: sResult += '<td>' + cell + '</td>' sResult += '</tr>' sResult += '</tbody></table>' return sResult
Ekwiwalent w php
<?php $sPath = 'res' . DIRECTORY_SEPARATOR . 'csv' . DIRECTORY_SEPARATOR . 'sample.csv'; $rFile = fopen( $sPath, 'r' ); $aResult = array(); $mResult = array(); do { $mResult = fgetcsv( $rFile ); $aResult[] = $mResult; } while ($mResult !== false); $iRows = count($aResult); unset ($aResult[$iRows-1]); ?> <table> <tbody> <?php foreach ($aResult as $row): ?> <tr> <?php foreach ($row as $cell): ?> <td><?php echo $cell ?></td> <?php endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table>
Jak widać kod w Pythonie jest troszkę krótszy ze względu na większą abstrakcje – w PHP można by osiągnąć ten sam efekt poprzez opakowanie funkcji fgetcsv
w obiekt implementujący interfejs Iterator.
Naszym kolejnym obiektem zainteresowanie będzie parsowanie plików XML, za zadanie weźmiemy sobie wyciągnięcie z pliku RSS wszystkich tytułów wpisów, będziemy korzystać z pasera typu DOM.
Kod pythonowy:
def test(path): from xml.dom.minidom import * sFile = path + 'files/rss.xml' # @type oDom xml.dom.minidom.Document oDom = parse(sFile) lTitles = oDom.getElementsByTagName('title') output = '' output += "<h1>Titles</h1>" output += "<ul>" for node in lTitles: output += "<li>" output += node.childNodes[0].nodeValue output += "</li>" output += "</ul" return output
Kod w PHP:
$sPath = 'res'.DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'rss.xml'; $oDom = new DOMDocument(); $oDom->preserverWhiteSpace = false; $oDom->load($sPath); $oTitles = $oDom->getElementsByTagName('title'); echo "<h1>Titles</h1>"; echo "<ul>"; foreach($oTitles as $title){ $sTitle = $title->nodeValue; echo "<li>",$sTitle,"</li>"; } echo "</ul>";
Widać kilka zasadniczych różnic w obu językach, po pierwsze aby parsować dokument XML w php należy użyć metody DOMDocument::load, natomiast w Pythonie mamy metode parse modułu minidom.
Po drugie w PHP jeżeli mamy noda którego jedyną zawartością jest tekst, to możemy się do niego dostać przez właściwość nodeValue, natomiast Pythonowy parser widzi nod z tekstem wewnątrz jak nod z dzieckiem, które to jest nodem tekstowym.
Tym wpisem prawdopodobnie zakończę serię “Aplikacje webowe w Pythonie dla programistów PHP”, mam nadzieje, że udało mi się zachęcić Was do zabawy z tym ciekawym językiem i spojrzenia z innej perspektywy na znane Wam zapewne zagadnienia w programowaniu.