Python - läs textfil, sortera och filtrera

Permalänk
Medlem

Python - läs textfil, sortera och filtrera

Jag försöker skapa ett program i Python som läser en textfil, skriver ut endast vissa delar och ändrar ordningen vid utskrift.
Att läsa textfilen och skriva ut den, har jag lyckats få till. Men sortering och delning är det värre med. Av vad jag hittat på nätet så känns det som jag bör använda split-funktionen?

Har ingen bok för ämnet, så jag skulle vara väldigt tacksam för tips eller tutorials. Har letat en bra stund nu utan att hitta något jag begriper.

Här är den kod jag har:

fob = open('access.log','r') print fob.readlines()

Permalänk
Medlem

fob = open("access.log") #öppnar automatiskt i "r"-läge om inget annat anges # Läs filen rad för rad for line in fob: # Här kan du nu göra vad du vill med varje rad # ex: # Splittar varje inläst rad på mellanrum och returnerar en lista med de element som # splittades ur din rad, sista elementet är radbrytningen (dvs "\n" om du kör linux) splitline = line.split(" ")

Beroende på hur din data ser ut antar jag du vill göra lite olika saker med den så svårt att ge några konkreta tips där.

Permalänk

Beroende på hur avancerade parsning du behöver kan det var läge att läsa på om regular expressions - re.

Permalänk
Medlem
Skrivet av Boulund:

fob = open("access.log") #öppnar automatiskt i "r"-läge om inget annat anges # Läs filen rad för rad for line in fob: # Här kan du nu göra vad du vill med varje rad # ex: # Splittar varje inläst rad på mellanrum och returnerar en lista med de element som # splittades ur din rad, sista elementet är radbrytningen (dvs "\n" om du kör linux) splitline = line.split(" ")

Beroende på hur din data ser ut antar jag du vill göra lite olika saker med den så svårt att ge några konkreta tips där.

När jag testar det så visas ingenting av filen i "utmatningsfönstret". Jag använder mig av Eclipse + PyDev.

Permalänk
Medlem

Ignorera mitt tidigare inlägg.

Nu har jag:

fob = open('access.log','r') for line in fob.xreadlines(): print line

Som läser filen och skriver ut den rad för rad. Nu skulle jag vilja dels bryta upp filen och bara skriva ut vissa delar av den, sedan ändra ordningen på utskriften.
Tar gärna emot tips på beskrivningar eller tutorials som beskriver detta. Fortsätter letandet så länge...

Permalänk
Medlem

Det hade varit oändligt mycket lättare att hjälpa dig om du gav några exempel på rader du vill parsa.
Det du vill göra är inte särskilt svårt i python, men utan några konkreta exempel så är det i princip omöjligt att ge dig bra svar.

Precis som Hacke[Man] säger så kan det eventuellt behövas reguljära uttryck för parsa ut det du vill ha.

Permalänk
Medlem

Har kommit en bit på vägen, nu är mitt problem att jag ska göra filen "körbar" (executable), sedan att få scriptet att starta från en hemsida.
Jag har läst en mängd information om py2app (har mac) och att lägga till en rad med kod, chmod 755, men jag begriper verkligen inte hur jag ska få ihop det. Har letat efter tutorials men lyckas inte hitta någon som förklarar från scratch.
Något tips?

Detta är vad jag har:

#! /usr/bin/python # coding: utf-8 print "Content-type: text/html" print text_file = open("access.log", "r") entire_file = text_file.readlines() text_file.close() print "<!DOCTYPE html>" print "<head>" print "<title>Python Test</title>" print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>" print "<head" print "<style></style>" print "</head" print "<body>" print "<table>" print "<tr><td>IP</td><td><Date</td><td>Action</td></tr>" for line in reversed(entire_file): try: arr = line.split(' ') date = arr[3] print "<tr><td>", arr[0], "</td><td>", date[1:], "<td></td>", arr[6], "</td></tr>" except IndexError, e: error = e print "</table>" print "</body>" print "</html>"

Permalänk
Medlem

Du får lägga den under cgi-bin om du ska ha den körbar. Åtminstone utan att konfa om webservern.

Permalänk
Medlem

Har lagt .py-filen i cgi-bin, och .html-filen i htdocs.

html-filen innehåller en knapp som jag vill starta python-scriptet med, men jag får det inte att fungera eller rättare sagt, jag förstår inte hur jag ska göra?

Inser att titeln på tråden borde ändras, men vet inte hur eller om det går att göra.