Python/Tiedosto

Wikikirjasto

Loikkaa: valikkoon, hakuun

[muokkaa] Tiedostojen vertailu

Esimerkeissä käytetään kahta tekstitiedostoa, joissa on useita lyhyitä rivejä. Tiedostoissa voi olla vaikka wikilinkkejä:

  • [[linkki]]
  • [[Linkki]]
# Avataan tiedosto f1.txt lukemista varten
f1 = open('f1.txt', 'r')
# Luetaan koko tiedosto merkkijonoksi s1
s1 = f1.read()
# Suljetaan tiedosto f1 - tiedosto voidaan sulkea heti kun se on luettu
f1.close()
 
# Tehdään samat kuin yllä
f2 = open('f2.txt', 'r')
s2 = f2.read()
f2.close()

Nyt tiedostojen sisällöt ovat muuttujien s1 ja s2 takana merkkijonoina.

[muokkaa] Poistetut rivit

Tarkoituksena on katsoa, mitkä rivit puuttuvat tiedostosta f2.txt mutta ovat tiedostossa f1.txt.

# Käytetään merkkijonoon split-funktiota, joka pätkii tekstin rivinvaihtojen (\n) kohdilta listaksi.
l1 = s1.split('\n')
l2 = s2.split('\n')
 
# Käydään l1-lista läpi alkio (i) kerrallaan.
for i in l1:
    # Jos i ei ole listassa l2 se tulostetaan ruudulle
    if i not in l2:
        print i

Harjoituksia:

  • Muokkaa yllä oleva näyttämään lisätyt rivit.
  • Tai muokkaa se sellaiseksi, ettei kirjainkoolla ole väliä (linkki ja Linkki olisivat sama).

[muokkaa] Difflib

Pythonin kirjastoon kuuluu difflib.py, jolla voi helposti vertailla kahta tiedostoa. Katsotaan, mitkä rivit on lisätty tiedostoon tai poistettu tiedostosta f2.txt.

# Tyhjä lista
l = []
 
# Muutetaan muuttujien nimet
newtext = s1
oldtext = s2
 
# Lähetetään difflibin ndiff-luokkaan oldtext ja newtext pätkittynä listoiksi.
# Käydään ndiffin palauttama merkkijono läpi rivi (line) kerrallaan.
for line in difflib.ndiff(oldtext.splitlines(), newtext.splitlines()):
     # Takaisin tulleessa merkkijonossa lisäyksien eteen on lisätty plus ja poistojen miinus.
     # Tarvitsemme vain muutetut rivit eli rivit jotka alkavat em. merkeillä.
     if line[0] in ('+', '-'):
          # Lisätään line listaan l
          l.append(line)
 
# Yhdistetään lista rivinvaihdoilla
diff = '\r\n'.join(l)
# Tulostetaan merkkijono diff
print diff

[muokkaa] Aiheesta muualla


Henkilökohtaiset työkalut