[Python-es] isfile()

Jesús Curbelo jescurbelo en gmail.com
Vie Ago 2 21:09:39 CEST 2013


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?*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130802/ad403f7d/attachment.html>


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