Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/inmersionpython3»
De WikiEducator
(Página creada con '{{MiTitulo|Inmersión en Python :: 3}} == Ficheros == <source lang="python"> # viejo estilo fin = open("foo.txt") for linea in fin: # manipular linea fin.close() # mejor …') |
(Sin diferencias)
|
Revisión de 23:32 26 nov 2012
Contenido
Ficheros
# viejo estilo fin = open("foo.txt") for linea in fin: # manipular linea fin.close() # mejor with open('foo.txt') as fin: for linea in fin: # manipular linea
Trabajando con archivos y directorios
Listado de archivos en un directorio
Para buscar todos los archivos con una extensión, por ejemplo .jpg:
import glob lista = glob.glob("*.jpg")
Para listar todos los archivos de un directorio:
import os ficheros = os.listdir('/home/alumno/ejercicios/python') # linux ficheros = os.listdir(r'c:\Documents and Settings\alumno\Escritorio\ejercicios\python') #windows: cuidado con el caracter \
Directorio actual:
os.getcwd() os.curdir
Tipos de ficheros
print michero, 'es un', if os.path.isfile(mifichero): print 'fichero' if os.path.isdir(mifichero): print 'directorio' if os.path.islink(mifichero): print 'enlace'
Último acceso a un fichero
ultimo_acceso = os.path.getatime('foto.jpg') ultima_modificacion = os.path.getmtime('foto.jpg') tiempo_en_dias = (time.time()- ultimo_acceso)/ (60*60*24) print tiempo_en_dias
Eliminar ficheros y directorios
os.remove('mifoto.jpg') for foto in glob.glob('*.jpg') + glob.glob('*.tif'): os.remove(foto)
Eliminar directorio:
import shutil shutil.rmtree('midirectorio')
Copiar y renombrar ficheros
import shutil shutil.copy(mifichero, copiafichero) # copia también tiempo de último acceso y última modificación shutil.copy2(mifichero, copiafichero) # copia un árbol de directorios shutil.copytree(raiz_de_directorio, copia_directorio)
Manipulando los paths y nombres
Rutas
>>> os.path.split('/home/alumno/python/ejercicios/ej1.py') ('/home/alumno/python/ejercicios', 'ej1.py') >>> os.path.basename('/home/alumno/python/ejercicios/ej1.py') 'ej1.py' >>> os.path.dirname('/home/alumno/python/ejercicios/ej1.py') '/home/alumno/python/ejercicios'
Extensiones
>>> os.path.splitext('pelicula.avi') ('pelicula', '.avi')
Crear y moverse entre directorios
directorioOriginal = os.getcwd() directorio = os.path.join(os.pardir, 'miNuevoDir') if not os.path.isdir(directorio): os.mkdir(directorio) os.chdir(directorio) ... os.chdir(directorioOriginal) # vuelve al directorio inicial os.chdir(os.environ['HOME']) # cambia al directorio home
Excepciones
try: f = open("file.txt") except IOError, e: # tratar excepción
Más complejo:
try: # código con riesgo except Exception, e: # captura excepción else: # si no ha saltado ninguna excepción finally: # ejecuta al final
Hojas de cálculo
Mucha información está almacenada en hojas de cálculo.
Ficheros CSV
La información de una hoja de cálculo se puede exportar/importar desde un fichero csv. Python tiene soporte para tratar ficheros csv. Un fichero csv es un fichero de texto.
Lectura
import csv with open('zaragoza_2010_10.csv') as fin: reader = csv.reader(fin, delimiter=";") for fila in reader: print fila
['Países', 'HOMBRES', 'MUJERES', 'TOTAL'] ['Rumania', '16704', '14487', '31191'] ['Ecuador', '5612', '5713', '11325'] ['Marruecos', '5042', '3007', '8049']
Escritura
with open('codigo_ascii.txt', 'w') as fout: writer = csv.writer(fout) ascii_a = ord('a') for n in range(26): writer.writerow((chr(ascii_a+n), ascii_a + n))
Quoting
writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
Dialectos
>>> csv.list_dialects() ['excel-tab', 'excel']
Se pueden crear dialectos:
csv.register_dialect(nombre, delimiter="|")
Usando nombres de campos
with open('zaragoza_2010_10.csv') as fin: # cuidado, toma la primera fila como títulos # usad parámetro fieldnames si no reader = csv.DictReader(fin, delimiter=";")
Hojas de cálculo Excel
Algunas librerías interesantes:
- xlrd
- http://pypi.python.org/pypi/xlrd
- Lee datos y formato de ficheros .xls
- Documentación de la API: https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html
- xlwt
- http://pypi.python.org/pypi/xlwt
- Escribe datos y formatos a ficheros .xls
- Doc: https://secure.simplistix.co.uk/svn/xlwt/trunk/xlwt/doc/xlwt.html
- Ejemplos: https://secure.simplistix.co.uk/svn/xlwt/trunk/xlwt/examples/
- xlutils
- http://pypi.python.org/pypi/xlutils
- Colección de utilidades que usan xlrd y xlwt:
- Doc y ejemplos: https://secure.simplistix.co.uk/svn/xlutils/trunk/xlutils/docs/
Sin embargo es necesario usar COM para :
- manipular gráficos
- celdas con texto enriquecido
- leer fórmulas
- trabajar con macros y nombres
xlrd
# ejemplo lectura import xlrd datos = {} # Dicc. vacío book = xlrd.open_workbook('sampledata.xls') hoja = book.sheet_by_index(0) for i in range(1,sh.nrows): #salta la primera línea datos[hoja.cell_value(rowx=i, colx=1)] = hoja.cell_value(rowx=i, colx=2)
xlwt
# ejemplo escritura import xlwt lista1 = [1,2,3,4,5] lista2 = [234,267,281,301,331] wb = xlwt.Workbook() ws = wb.add_sheet('Primera hoja') ws.write(0,0,'Column A') ws.write(0,1,'Column B') i = 1 for x,y in zip(lista1,lista2): # Recorre las dos listas a la vez ws.write(i,0,x) # Fila, Columna, Datos. ws.write(i,1,y) i += 1 wb.save('hoja.xls')