Soy nueva en python.

Estoy trabajando en un script para pedirle a un usuario una ruta de directorio. Una vez provisto, me gustaría que el script enumere todos los archivos en el directorio, excluyendo cualquier subdirectorio.

Esto es lo que tengo hasta ahora. Parece que estoy atascado tratando de encontrar una manera de probar para ver si el elemento en cuestión es un directorio o un archivo. Por favor ayuda.

#! /usr/bin/python

import os

dir_f = raw_input(" Plese enter directory path where you would like to have \
the files renamed \n" )

#print dir_f

os.chdir(dir_f)

#prints items in directory one line at a time. TEST section

while os.listdir(dir_f):
    if os.path.isdir(dir_f):
        continue
    else:
        print "\n".join(os.listdir(dir_f)) 

    # os.rename(src, dst) dont use this yet.
0
user3655020 2 sep. 2014 a las 23:24

3 respuestas

La mejor respuesta

Puede probar un código simple y se integrará a sus necesidades.

import os

folder = '/tmp/test'

for item in os.listdir('/tmp/test'):
    if not os.path.isdir(os.path.join(folder,item)):
         print item
3
Lovato 2 sep. 2014 a las 19:32

Aquí está mi script con los cambios sugeridos por Lovato

#! /usr/bin/python

import os 





dir_f = raw_input(" Plese enter directory path where you would like to have \
the files renamed \n" )

#print dir_f

os.chdir(dir_f)


for item in os.listdir(dir_f):
    if not os.path.isdir(os.path.join(dir_f,item)):
                         print item
-1
user3655020 2 sep. 2014 a las 20:17

Prueba esto: creo que hace lo que quieres. Dos cambios importantes:

  1. Usé un bucle for en lugar de while (lea sobre cómo funciona esto!)
    • (Un bucle for es, en general, la forma correcta de iterar a través de una lista o colección de objetos en Python).
  2. Su versión claramente perdió el not en if not os.path.isdir(...); su versión trataba los no directorios como directorios, y viceversa

Código ( editado para incluir mensajes explicativos sobre lo que está encontrando ):

import os, os.path

dir_f = raw_input(" Plese enter directory path where you would like to have \
the files renamed \n" )

#print dir_f

os.chdir(dir_f)

#prints items in directory one line at a time. TEST section

for item in os.listdir(dir_f):
    if not os.path.isdir(os.path.join(dir_f,item)):
        print "this is not a directory: ", item
    else:
        print "this is a subdirectory: ", item
        print "... and it contains: ", ','.join(os.listdir(os.path.join(dir_f,item)))

    # os.rename(src, dst) dont use this yet.
0
Dan Lenski 2 sep. 2014 a las 20:10