() translation by (you can also view the original English article)
Kezdjük azzal, hogy egy-az-egyben megkérdem, tényleg Pythonra van szükségünk nagy szöveges fájlok olvasásához? Nem lenne ehhez elég a szokásos szófeldolgozónk vagy szövegszerkesztőnk? Amikor a nagy szót használom, akkor valójában extrém módon nagy fájlokra gondolok!
Nos, nézzünk meg néhány evidenciát, hogy kell-e nekünk a Python az ilyen fájlok olvasásához vagy sem?
A fájl beszerzése
Hogy végrehajtsuk a kísérletünket, egy extrém módon nagy szöveges állományra lesz szükségünk. Ebben az útmutatóban ezt a fájlt az UCSC Genome Bioinformatics letöltési weboldalról szerezzük be. Pontosabban az a fájl, amit felhasználunk, a hg38.fa.gz
fájl, amely, ahogy itt bemutatásra került, egy:
"Soft-masked" assembly szekvencia egy állományban. A RepeatMasker és Tandem Repeats Finder ismétlései (12 vagy kevesebb sorozatban) kisbetűvel jelöltek, míg a nem ismétlődő sorozat nagybetűvel van jelölve.
Nem szeretném, ha azon idegeskednél, hogy nem érted a fenti mondatokat, mivel ezek a genetika terminológiájához tartoznak. Ami fontos ennek az útmutatónak, az az extrém méretű szöveges állományok olvasásának koncepciója Python segítségével.
Kezdjük el, és töltsük le a hg38.fa.gz
fájlt (légy óvatos, a fájl 938 MB). Használhatod a 7-zip programot a fájl kibontásához, vagy bármely más eszközt, melyet előnyben részesítesz.
A fájl kibontása után kapsz egy hg38.fa
elnevezésű állományt. Nevezd ét hg38.txt
névre, hogy egy szöveges állományt kapj.
A fájl megnyitása a hagyományos módon
A hagyományos mód alatt azt értem, hogy egy szófeldolgozó vagy szövegszerkesztővel nyitjuk meg a fájlt. Lássuk, mi történik, ha megpróbáljuk.
Először a Microsoft Wordöt használtam a fájl megnyitásához, s a következő üzenetet kaptam:



Habár a fájlt sem a WordPad, sem a Jegyzettömb nem nyitotta meg egy Windows-os gépen, a Mac OS X alatt futó TextEdit megnyitotta.
Ettől függetlenül gondolom látod a lényeget, s egy garantált megoldás továbbra is jó lenne a hasonlóan extrém nagy méretű szöveges állományok megnyitásához. Ebben a gyorstippben megmutatom, hogyan tedd meg ezt Python segítségével.
Szöveges állomány olvasása Python segítségével
Ebben a szekcióban megnézzük, hogyan tudjuk beolvasni a nagy állományunkat Python segítségével. Mondjuk azt, hogy szeretnénk elolvasni a nagy állományunk első 500 sorát. Ehhez egyszerűen csak a következőket kell tennünk:
1 |
input_file = open('hg38.txt','r') |
2 |
output_file = open('output.txt','w') |
3 |
|
4 |
for lines in range(500): |
5 |
line = input_file.readline() |
6 |
output_file.write(line) |
A hg38.txt
fájlból soronként kiolvasunk 500 sort, s beírjuk ezeket egy új szöveges állományba, amelynek output.txt
a neve. Ennek úgy kell kinéznie, mint ebben a fájlban.
De mondjuk azt, hogy mi közvetlenül a szöveges fájlban szeretnénk navigálni, anélkül, hogy soronként kibontatnánk, s bemásolnánk egy másik fájlba - különösen azért, mert ez a megoldás sokkal rugalmasabb lenne.
Navigálás nagyméretű szöveges állományokban
Habár a fenti megoldás lehetővé tette számunkra nagyméretű szöveges állományok olvasását, soronkénti kibontását, s ezen sorok új szöveges állományba másolását, a kibontás nélküli navigáció a nagy állományban sokkal jobb megoldás lenne.
Ezt egyszerűen megtehetjük Python segítségével, ahol a szöveges állományt a terminál képernyőről a következő megoldással olvashatjuk be (egyszerre a fájl 50 során keresztülnavigálva):
1 |
input_file = open('hg38.txt','r') |
2 |
|
3 |
while(1): |
4 |
for lines in range(50): |
5 |
print input_file.readline() |
6 |
user_input = raw_input('Type STOP to quit, otherwise press the Enter/Return key ') |
7 |
if user_input == 'STOP': |
8 |
break
|
Ahogy a szkriptből láthatod, most már azonnal keresztülnavigálhatsz a nagyméretű szöveges állományon, csupán a terminál használatával. Amikor meg szeretnéd állítani a folyamatot, csak üsd be a STOP
szót a terminálodba, a nagybetűkre is figyelve.
Biztos vagyok benne, hogy már látod, mennyire egyszerű a Python segítségével keresztül navigálni ilyen extrém nagyméretű szöveges állományokon, bármilyen probléma nélkül. A Python megint bebizonyította, hogy képes könnyebbé tenni az életünket!