stringIO – memóriában létrehozott fájlok használata

Ezzel a modullal egy olyan fájl objektumot hozhatsz létre, ami valójában a memóriában tárolódik. Minden műveletet, amit egy winchesteren lévő fájllal megtehetsz, elvégezhető ezen az objektumon is. Használata a memória sebessége miatt ott érdemes, ahol kisméretű átmeneti fájlokat használnál, és a winchesterműveletek lelassítanák a program futását.

Figyelem: A modulnak létezik egy gyorsabb, c-ben megírt változata, a cStringIO modul. Ez ugyanúgy működik, mint a stringIO, csak nem lehet belőle osztályt származtatni. Ehhez példát a lap alján találsz.

Fájl létrehozása a memóriában

# File: stringIO_fajl_letrehozasa_memoriaban.py

import StringIO

szoveg = "Egy fekete felho az egbol...\n"

# a fajlobjektum letrejott, es rogton belekerult a szoveg tartalma.
file = StringIO.StringIO(szoveg)

print file.read()  # Egy fekete felho az egbol...

file.write("gomolyog csendben az odunal")

print file.getvalue() # a fajlobjektum aktualis tartalmat igy erheted el
# File: stringIO_fajl_letrehozasa_memoriaban.out

Egy fekete felho az egbol...

Egy fekete felho az egbol...
gomolyog csendben az odunal

A szabányos kimenet memóriába írása

Tegyük fel, hogy egy műveletsorozatot végzünk el, melynek kimenetét (az esetleges hibaüzenetekkel együtt) csak akkor akarjuk megjeleníteni, ha a műveletsorozat lefutott. Ekkor a kimenetet a memóriafájlba érdemes írni, és ha szükséges, kiíratható a szabványos kimenetre.

# File: stringIO_szabvanyos_kimenet_memoriaba_irasa.py import StringIO import string, sys # az eredeti szabvanyos kimenetre mutato hivatkozast eltaroljuk # stdout-ban. # a Pythonban nem valtozo ertekadas tortenik, hanem hivatkozasok masolasa objektumokra. # itt a stdout_eredeti_hivatkozas ugyanoda mutat (meg), mint a sys.stdout, amit kesobb megvaltoztatunk stdout_eredeti_hivatkozas = sys.stdout # a szabvanyos kimenet ezentul a memoriafajlra mutat. # vagyis minden, ami a kimenetre menne, a memoriafajlba kerul. sys.stdout = file = StringIO.StringIO() # --> memoriafajlba print-elunk. print """ Harom gyuru ragyogjon a tunde kiralyok kezen... """ sys.stdout = stdout_eredeti_hivatkozas # itt mar a valodi kimenetre kerul a szoveg print string.upper(file.getvalue())
# File: stringIO_szabvanyos_kimenet_memoriaba_irasa.out

HAROM GYURU RAGYOGJON A TUNDE KIRALYOK KEZEN...

Fájl létrehozása a memóriában, C változat

# File: stringIO_fajl_memoriaban_C_atirattal.py

import cStringIO

#Fontos: cStringIO-bol NEM lehet osztalyt szarmaztatni!

szoveg = "Csuda egy pok ez a vizipok!"

# file_objektum az uj fajlra mutat,ami rogton tartalmazni fogja szoveg erteket.
file_objektum = cStringIO.StringIO(szoveg)

print file_objektum.read()
# File: stringIO_fajl_memoriaban_C_atirattal.out

Csuda egy pok ez a vizipok!

Post Comments

You must be logged in to post a comment.