[Python-es] isfile()

2013-08-02 Por tema Jesús Curbelo Rodríguez

Hola a todos,

Tengo este pequeño script:

import os
import os.path
for fileName in open('testfile.txt'):
f = fileName # opcion 1
#f = cwd + os.path.sep + fileName # opcion 2
#f = os.path.join(os.getcwd(), fileName) # opcion 3
if os.path.isfile(f):
print Encontrado el archivo %s % fileName
else:
print No encontrado el archivo %s % fileName

donde *testfile.txt* incluye la lista de ficheros del directorio donde 
esta el script.
Ejecuto el script y no encuentra ninguno de los archivos, o lo que es lo 
mismo *isfile *devuelve *False* para todos los archivos (probado tanto 
en Windows como en Linux). Tampoco me funciona usando la opción 2 ni la 
opción 3.
El mismo script en TCL o batch funciona perfectamente encontrando todos 
los archivos listados en *testfile.txt*
Si pruebo desde IDLE la funcion *isfile* devuelve *True*. Si en el 
script pongo el nombre del archivo o la ruta completa (usando en ambos 
casos raw strings) el resultado es el correcto (*isfile* devuelve *True*).

He estado buscando en la red pero no consigo encontrar la solución.

Gracias y saludos.
--
*Jesús Curbelo
/Quis custodiet ipsos custodes?/ *
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Expresiones regulares: repeticiones de dos caracteres con longitud constante

2012-08-22 Por tema Jesús Curbelo Rodríguez

El 22/08/2012 10:56, Juan Ignacio escribió:

¿Podría valerte este?

^A+B*$|^A*B+$

Tendrías que comprobar en un test aparte que la longitud del string es N

2012/8/22 Jesús Curbelo Rodríguez jescurb...@gmail.com 
mailto:jescurb...@gmail.com


Hola a todos,

Me ha surgido una duda intentando crear una expresión regular.

Supongamos que tenemos una lista de cadenas que cumplen las
siguientes condiciones

  * La longitud de las cadenas es constante, digamos que de
longitud N.
  * Las cadenas están formadas sólo por los caracteres A y B.
  * Los caracteres A siempre están alineados a la izquierda.
  * Los caracteres B siempre están alineados a la derecha.
  * Los caracteres A pueden aparecer J veces, siendo 0=J=N.
  * Los caracteres B pueden aparecer K veces, siendo 0=K=N.
  * J y K son distintos para cada cadena pero siempre se cumple J
+ K = N.
  * Ejemplos, para N=5: A, B, AAABB, AABBB, A, B
(para N=5 no hay más posibilidades).


Cuando N es pequeño podemos poner todas las opciones como
alternativas, por ejemplo, para N=2 podemos usar la expresión
A{2}|AB|BA|B{2} . Pero para valores mayores de N esta forma de
proceder es inviable.

¿Alguien conoce una expresión regular que se pueda usar para
cualquier valor de N?

Gracias de antemano.

Saludos.

Jesús Curbelo.


___
Python-es mailing list
Python-es@python.org mailto:Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




--
Juan Ignacio Rodríguez de León
Móvil: 605 890514
E-Mail: euriba...@gmail.com mailto:euriba...@gmail.com
http://www.metriz.com/
http://descon2.com/
http://www.elornitorrincoenmascarado.com/


___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Hola Juan Ignacio,

La idea era que N apareciese explícitamente en la expresión 
regular. Pero me temo que es imposible sólo con expresiones regulares 
así que la solución que propones debe ser la correcta.


Gracias por tu tiempo y saludos.

--
*Jesús Curbelo mailto:jescurb...@gmail.com
/Quis custodiet ipsos custodes?/ *
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] matriz de matrices irregulares en longitud

2012-04-27 Por tema Jesús Curbelo Rodríguez

Hola a todos,

Hace tiempo escribí esto, igual te sirve aunque falta pulirlo.

Saludos.

#!/usr/bin/env python
# -*- coding: utf-8 -*-


class Vector(list):
'''Vector de tamaño fijo con/sin comprobación de tipo'''

def __new__(cls, *args, **kwargs):
# Internamente los elementos del vector se almacenan en una lista.
return list.__new__(cls, *args, **kwargs)

def __init__(self, length, default_value=None, initial_values=None, 
typed=True):

# El vector tendrá el tamaño indicado por length.
# Los elementos del vector se inicializan con los elementos de 
initial_values.
# Si len(initial_values)  length el vector se rellena con 
default_value

# hasta alcanzar la longitud requerida.
# Si len(initial_values)  length se descartan los elementos de 
initial_values

# con indice mayor a length.
# Si todos los elementos de initial_values y default_value 
tienen el mismo
# tipo el vector será de dicho tipo y solo podra almacenar 
valores de
# ese tipo. En caso contrario el vector no tendra tipo y podra 
almacenar

# elementos de cualquier tipo.
# Si typed == False no se tendra en cuenta el tipo de los 
elementos.


try:
same_type = True
l = len(initial_values)
for i in range(length):
if i  l:
self.append(initial_values[i])
same_type = same_type and (type(default_value) == 
type(initial_values[i]))

else:
self.append(default_value)
except:
self.extend([default_value]* length)
finally:
self.__length = length
self.__type = type(default_value) if (same_type and typed) 
else type(None)



def __setitem__(self, index, value):
# Comprobamos el tipo antes de insertar un elemento.
if self.__type == type(value) or self.__type == type(None):
super(Vector, self).__setitem__(index, value)
else:
# Elemento de tipo incorrecto, no se inserta.
raise ValueError

def __setslice__(self, i, j, sequence):
# Impedimos este método para que altere el tamaño del vector.
# TODO: hacer lo mismo con el resto de métodos de la clase list que
# pueden cambiar el tamaño del vector.
raise ValueError # FIXME: poner la excepción correcta.

def __count__(self):
return self.__length

@property
def type(self):
return self.__type

@property
def length(self):
return self.__length


class Matrix(Vector):
'''Matriz bidimensional de tamaño fijo con/sin comprobación de tipo'''

def __init__(self, cols, rows, default_value=None, 
initial_values=None, typed=True):

# Indicamos el número de columnas y filas de la matriz.
self.__cols = cols
self.__rows = rows
super(Matrix, self).__init__(cols * rows, default_value, 
initial_values, typed)


def __setitem__(self, index, value):
# FIXME: interceptar índices no válidos.
col, row = index
index = self.__cols * row + col
super(Matrix, self).__setitem__(index, value)

def __getitem__(self, index):
# FIXME: interceptar índices no válidos.
col, row = index
index = self.__cols * row + col
return super(Matrix, self).__getitem__(index)

def __repr__(self):
result = 
for i in range(0, self.length, self.cols):
result += [%s] % , .join([str(s) for s in self[i: i + 
self.cols]])

return [%s] % result

def __str__(self):
result = 
for i in range(0, self.length, self.cols):
result += %s\n %   .join([str(s) for s in self[i: i + 
self.cols]])

return result

@property
def cols(self):
return self.__cols

@property
def rows(self):
return self.__rows

def row(self, index):
'''Devuelve la fila con índice index'''
# FIXME: comprobar limites
i = index * self.__cols
return self[i:i + self.__cols]

def col(self, index):
'''Devuelve la columna con índice index'''
# FIXME: comprobar limites
return [self[index, i] for i in range(self.__cols)]

def submatrix(self, ix, iy, jx, jy):
'''Devuleve una submatrix de la matrix'''
m = []
for y in range(iy, jy + 1):
k = y * self.__cols
m.append(self[k + ix:k + jx + 1])
# OJO!! el valor devuelto es un lista y no de la clase matrix
return m

def list(self):
'''Devuleve los elementos de la matrix como una lista'''
return list(self)

def sublist(self, ix, iy, jx, jy):
'''Devuleve una submatrix de la matrix en forma de lista'''
l = []
for y in range(iy, jy + 1):
k = y * self.__cols
l.extend(self[k + ix:k + jx + 1])
# OJO!! el valor