Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Python: Tiettyjen rivien poisto tiedostosta

Sivun loppuun

rica [22.01.2013 18:32:53]

#

osaisiko joku tehdä yksinkertaisen scriptin, joka poistaa txt tiedostosta kaikki rivit jotka eivät sisällä esim. lukua 12345

Grez [22.01.2013 18:55:14]

#

grep -v 12345 <alkup.txt >valmis.txt

rica [22.01.2013 19:16:45]

#

py koodiin siis pelkkä: grep -v "12345" ?

ja sitten suoritus python.exe koodi.py alkup.txt >valmis.txt

Grez [22.01.2013 19:29:40]

#

Ei siihen mitään pythonia tarvi. Suoraan shellissä/komentorivillä ajetaan.

rica [22.01.2013 19:42:34]

#

toimiiko toi windowsilla?

Metabolix [22.01.2013 19:51:39]

#

Ei toimi, jos ei ole grep-ohjelmaa.

Pythonilla:

open("valmis.txt", "w").writelines([s for s in open("alkup.txt", "r").readlines() if "12345" in s])

Muokkaus: not in -> in

Chiman [22.01.2013 20:22:12]

#

Metabolixin koodi toimii mainiosti kaikilla muilla paitsi erittäin suurilla tiedostoilla. Niillä ongelmaksi voi muodostua muistinkulutus, koska tuossa []-osassa rakennetaan muistiin lista kaikista tiedoston säilytettävistä riveistä, ja vasta sitten aletaan kirjoittaa niitä kohdetiedostoon.

On parempi hyödyntää Pythonin iterointia, jonka avulla tiedostoa luetaan pätkittäin eteenpäin ja kirjoitetaan samalla.

open("valmis.txt", "w").writelines(s for s in open("alkup.txt") if "12345" in s)

Tuossa writelines "imee" argumenttina annetusta generaattorilausekkeella määritellystä iteraattorista rivejä lisää sitä mukaa kun kirjoittaa niitä levylle. Hakusanat lisätietoa varten: list comprehension, generator expression.

Muokkaus: not in -> in

rica [22.01.2013 20:24:32]

#

kiitos, mutta piti siit poistaa muut kuin se tietyn tekstin sisältävä 12345.
tuo metabolixin script poisti ne jotka sisälsi sen

Chiman [22.01.2013 20:29:02]

#

rica kirjoitti:

kiitos, mutta piti siit poistaa muut kuin se tietyn tekstin sisältävä 12345.
tuo metabolixin script poisti ne jotka sisälsi sen

Näinhän se olikin, korjasin koodin edelliseen viestiini. Yksi not pois.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta