[Python-es] isfile()

Jose Caballero jcaballero.hep en gmail.com
Vie Ago 2 21:18:07 CEST 2013


al hacer

      for filename in open(...):

cada filename incluye el caracter de retorno de carro.
Comprueba que eso no te da problemas.
Si acaso intenta

      for filename in open(...):
             filename = filename[:-1]
             bla bla bla

or algo similar para quitar el \n del final de cada linea



Suerte,
Jose



El día 2 de agosto de 2013 21:09, Jesús Curbelo <jescurbelo en gmail.com> escribió:
> Por cierto que hay un error en el script, la línea:
>
> #f = cwd + os.path.sep + fileName # opcion 2
>
> es en realidad:
>
> #f = os.getcwd() + os.path.sep + fileName # opcion 2
>
> El script es más complejo pero al simplificarlo para ponerlo aquí no corregí
> esa línea :-(
>
> Yo también pensé que el problema se debía a que el script se ejecutaba en
> otro directorio y por eso no encontraba los ficheros. Pero tanto desde IDLE
> como desde el script me he asegurado de que está en el directorio correcto
> usando os.chdir() y os.getcwd(). Además he puesto todos los print necesarios
> para que las rutas son las correctas (además de haber usado la opción 1, la
> opción 2 y la opción 3). Por ejemplo esta variación tampoco funciona:
>
> import sys, os, os.path
> fileExists =  0
> fileNoExists = 0
> cwd = os.getcwd()
> print "Directorio actual: %s" % cwd
> for fileName in open(sys.argv[1]):
>     f = cwd + os.sep + fileName
>     if os.path.isfile(f):
>         fileExists += 1
>         print "Encontrado el archivo %s" % f,
>     else:
>         fileNoExists +=1
>         print "No encontrado el archivo %s" % f,
> print "Archivos encontrados: %d" % fileExists
> print "Archivos NO encontrados: %d" % fileNoExists
>
> Sin embargo este script en TCL ejecutado desde el mismo directorio y con los
> mismos datos de entrada funciona perfectamente:
>
> set fileExists 0
> set fileNoExists 0
> set testFile [open [lindex $argv 0] r]
> while { [gets $testFile fileName] >= 0 } {
>     if { [file exists $fileName] } {
>         incr fileExists
>         puts "Encontrado el archivo $fileName"
>     } else {
>         incr fileNoExists
>         puts "No encontrado el archivo $fileName"
>     }
> }
> close $testFile
> puts "Archivos encontrados: $fileExists"
> puts "Archivos NO encontrados: $fileNoExists"
>
>
> El 2 de agosto de 2013 17:49, Ricardo Azpeitia Pimentel
> <razpeitia en gmail.com> escribió:
>>
>> Si abre el archivo pero nunca lo cierra. Y si, puedes iterar sobre un
>> archivo, y por default usa xreadlines si no mal recuerdo.
>>
>> Lo que pasa es que usa getcwd y depediendo de donde ejecute el script  y
>> donde se encuentren sus archivos va a tener resultados diferentes.
>>
>> Una buena idea seria imprimir la rutas para ver cual es la diferencia.
>>
>>
>> El 2 de agosto de 2013 11:41, Carlos Zuniga <carlos.zun en gmail.com>
>> escribió:
>>
>>> 2013/8/2 Jesús Curbelo Rodríguez <jescurbelo en gmail.com>:
>>> > 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.
>>> >
>>>
>>>
>>> open() devuelve un objeto fichero y no creo que puedas hacer un bucle
>>> sobre él directamente (o tal vez esto haga bucle sobre cada
>>> carácter?), tienes que llamar a su método readlines.
>>>
>>> Prueba con:
>>>
>>> with open('testfile.txt', 'r') as my_file:
>>>     for file_name in my_file.readlines():
>>>         if os.path.isfile(file_name) ...
>>>
>>>
>>> Saludos
>>> --
>>> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
>>> de leer manuales.
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
>
> --
> Jesús Curbelo
> Who watches the watchmen?
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>


Más información sobre la lista de distribución Python-es