Aplikacje webowe w Pythonie dla programistów PHP pt.3
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 = '
' + cell + ' | ' sResult += '
Ekwiwalent w php
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 += "Titles
"
output += "
- "
for node in lTitles:
output += "
- " output += node.childNodes[0].nodeValue output += " " 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 "Titles
";
echo "
- ";
foreach($oTitles as $title){
$sTitle = $title->nodeValue;
echo "
- ",$sTitle," "; } echo "
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.
Obecnie jestem na etapie pisania pracy magisterskiej o wydajności aplikacji www. Mam w niej m.in porównać wydajność skryptów w PHP i Pythonie, jak tylko ukończę testy, zamierzam przedstawić wyniki wraz z metodologią w jednym z kolejnych postów.
Bardzo fajnie wygląda to programowanie w Pythonie, nawet łatwiej i mniejszym nakładem pracy niż w PHP (choć jeszcze nie testowałem). Niebawem chyba trochę pobawię się w tym języku, dobrze jest poznać jakąś alternatywę dla PHP
Uciął Ci się koniec taga w drugim przykładzie pythonowym, o tu:
output += “</ul"
@robert gawron: dzięki, już poprawiłem
@kilas: zapraszam do przeczytania poprzednich części tutoriala 😉
Wojciech, czytałem na bieżąco
Niebawem będzie trzeba dołączyć do Apache mod_wsgi i też się pobawić.
Swoją drogą, dobrze byś zrobił na swoim blogu zakładkę “Podobne wpisy” (np. http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/) – bardzo pomocne, zwłaszcza w przypadku takich kilkuczęściowych wpisach.
Dzięki za sugestie, już dołożyłem