Ero sivun ”Python 2/Tiedosto” versioiden välillä

Poistettu sisältö Lisätty sisältö
Samulili (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Rivi 1:
==Tiedostojen vertailu==
 
Esimerkeissä käytetään kahta tekstitiedostoa, joissa on useita lyhyitä rivejä. Tiedostoissa voi olla vaikka wikilinkkejä:
* <nowiki>[[linkki]]</nowiki>
* <nowiki>[[Linkki]]</nowiki>
<pre>
 
# 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()
</pre>
 
Nyt tiedostojen sisällöt ovat muuttujien s1 ja s2 takana merkkijonoina.
 
===Poistetut rivit===
Tarkoituksena on katsoa, mitkä rivit puuttuvat tiedostosta f2.txt mutta ovat tiedostossa f1.txt.
 
<pre>
# 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
</pre>
 
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).
 
===Difflib===
 
Pythonin kirjastoon kuuluu difflib.py, jolla voi helposti vertailla kahta tiedostoa. Katsotaan mitkä rivit on lisätty tiedostoon tai poistettu tiedostosta f2.txt.
<pre>
# 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
</pre>
 
[[Luokka:Python]]