elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Algoritmo cuasi-acabado de listado de archivos en un fichero
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Algoritmo cuasi-acabado de listado de archivos en un fichero  (Leído 4,844 veces)
Shrick

Desconectado Desconectado

Mensajes: 259


Yo no se nada, sino ¿porque pregunto?


Ver Perfil
[Python] Algoritmo cuasi-acabado de listado de archivos en un fichero
« en: 14 Mayo 2009, 00:07 am »

La idea es indexar todos y cada uno de tus archivos en un simple archivo, para después cuando quieras buscar un archivo, simplemente buscas, es simplemente mera curiosidad este algoritmo y es para probar como se recorrería una estructura de árbol.

La forma más adecuada o sencilla es por medio de recursividad que si digo la verdad hasta hace 2 o 3 meses no tenia ni idea.

Hacerlo de forma iterativa es poco menos que cometer un suicidio, pero por supuesto es posible.

Yo en el algoritmo he ideado una combinación mixta de ambas, para recorrer hacia abajo he usado recursividad y para recorrer en lateral he usado la forma iterativa.

Código
  1. # -*- coding: cp1252 -*-
  2.  
  3. import os
  4.  
  5. directorio = os.getcwd()
  6. lista = directorio
  7.  
  8. f = open('listado.txt', 'w')
  9.  
  10. directorio = directorio.split("\\")
  11. directorio = directorio[0]
  12.  
  13. #print directorio
  14.  
  15. os.chdir(directorio + "\\")
  16.  
  17.  
  18. def listado():
  19.    i = 0
  20.    archivos = os.listdir(directorio)
  21.    while i <= len(archivos):
  22.        if os.path.isfile(directorio+"\\"+archivos[i]) == True:
  23.            f.write(directorio+"\\"+archivos[i]+"\n")
  24.        else:
  25.            subdirectorios(directorio+"\\"+archivos[i])
  26.        i +=1
  27.  
  28. def subdirectorios(direc):
  29.    j=0
  30.    archivos=os.listdir(direc)
  31.    while j < len(archivos):
  32.        if os.path.isfile(direc+"\\"+archivos[j]) == True:
  33.            f.write(direc+"\\"+archivos[j]+"\n")
  34.        else:
  35.            subdirectorios(direc+"\\"+archivos[j])
  36.        j+=1
  37.  
  38. listado()
  39.  
  40. f.close()

Solo tiene un pequeño problema:

Citar
  File "C:\Documents and Settings\Shrick\Mis documentos\Prog\Python\araña.py", line 35, in subdirectorios
    subdirectorios(direc+"\\"+archivos[j])
  File "C:\Documents and Settings\Shrick\Mis documentos\Prog\Python\araña.py", line 30, in subdirectorios
    archivos=os.listdir(direc)
TypeError: listdir() argument 1 must be (buffer overflow), not str

Que es debido seguramente a la capacidad de la lista al poner todos los archivos porque tiene un límite y no se me ocurre una solución :( .


« Última modificación: 14 Mayo 2009, 13:29 pm por Shrick » En línea

Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .
Anibal784


Desconectado Desconectado

Mensajes: 762

Yo no la vote, pero me la tengo que aguantar igual


Ver Perfil WWW
Re: [Python] Algoritmo cuasi-acabado de listado de archivos en un fichero
« Respuesta #1 en: 14 Mayo 2009, 01:59 am »

¿por qué no usar for?
Código
  1. for file in os.listdir(direc):
  2.    path_to_file = direc + os.path.sep + file
  3.    if os.path.isfile(path_to_file):
  4.        f.write(path_to_file)
  5.    else:
  6.        subdirectorios(path_to_file)
  7.  


En línea

El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.
seroblood

Desconectado Desconectado

Mensajes: 24

a


Ver Perfil
Re: [Python] Algoritmo cuasi-acabado de listado de archivos en un fichero
« Respuesta #2 en: 14 Mayo 2009, 02:24 am »

En primer lugar sacale el punto y coma de
Código:
f = open('listado.txt', 'w');

A mi tambien me tiraba un par de errores .. no identicos por que se ve que no tenemos la misma version pero eh de suponer que indican lo mismo la ejecucion del script se te detiene por dos motivos: uno por un problema con los atributos y privilegios de acceso a carpetas de informacion que puede ser sensible o lo que sea entonces te tira uno de esos errores de acceso denegado ... como ami... en ese caso lo arreglas con un try-except(arreglarno no lo arreglas  :xD pero asi ignoras con esas restricciones y seguis ejecutando(interpretando xd) el script)
Y otro error que puede largar una vez solucionado lo anterior claro es poner otro try-except xD para que no joda con lo de indexerror

aca te dejo como me quedo... el script lista todos los archivos ... excepto en aquellas carpetas en donde no se permite lectura....

Código
  1. # -*- coding: cp1252 -*-
  2.  
  3. import os
  4.  
  5. directorio = os.getcwd()
  6. lista = directorio
  7.  
  8. f = open('listado.txt', 'w')
  9.  
  10. directorio = directorio.split("\\")
  11. directorio = directorio[0]
  12.  
  13.  
  14.  
  15. os.chdir(directorio + "\\")
  16.  
  17.  
  18. def listado():
  19.    i = 0
  20.    archivos = os.listdir(directorio)
  21.    while i <= len(archivos):
  22. try:
  23. if os.path.isfile(directorio+"\\"+archivos[i]) == True:
  24. f.write(directorio+"\\"+archivos[i]+"\n")
  25.  
  26. else:
  27. try:
  28. subdirectorios(directorio+"\\"+archivos[i])
  29. except:
  30. print "WINDOWS FORBBIDEN !"
  31. except IndexError:
  32. print "ya ta aca cortamo"
  33. i +=1
  34.  
  35. def subdirectorios(direc):
  36.    j=0
  37.    archivos=os.listdir(direc)
  38.    while j < len(archivos):
  39.        if os.path.isfile(direc+"\\"+archivos[j]) == True:
  40.            f.write(direc+"\\"+archivos[j]+"\n")
  41.        else:
  42.            subdirectorios(direc+"\\"+archivos[j])
  43.        j+=1
  44.  
  45. listado()
  46.  
  47. f.close()
  48.  

Como dijo anibal con el for te va a resultar mejor y te vas a ahorrar andar con listas y evitar un indexerror pero igualmente vas a necesitar chekar eso de los atributos de las carpetas para que no te joda el interprete en plena ejecucion ....
En línea

Shrick

Desconectado Desconectado

Mensajes: 259


Yo no se nada, sino ¿porque pregunto?


Ver Perfil
Re: [Python] Algoritmo cuasi-acabado de listado de archivos en un fichero
« Respuesta #3 en: 14 Mayo 2009, 13:51 pm »

Muchas gracias a los dos ;) , aunque aparenta ir más lento pero eso me da igual porque hace lo que quiero y gracias a Anibal, esta más legible, yo es que no sabia sinceramente que se podía hacer de ese modo. Yo como quien dice soy de la vieja escuela.

Yo considero que estoy como administrador cuando ejecuto el programa, cuando consiga que funcione perfectamente entonces, ya pasamos a hablar de permisos de ficheros y carpetas, y su futura implementación a GNU\Linux que es mi objetivo final, lo he hecho para Windows precisamente para ahorrarme permisos y demás aunque ya se que se puede hacer sudo su, python archivo.py, y funciona igual, pero, como ya he dicho prefiero que sea así.

Pongo la corrección que me ha hecho Anibal:

Código
  1. import string
  2.  
  3. directorio = os.getcwd()
  4. lista = directorio
  5.  
  6. f = open('listado.txt', 'w')
  7.  
  8. directorio = directorio.split("\\")
  9. directorio = directorio[0]
  10.  
  11. os.chdir(directorio + "\\")
  12.  
  13.  
  14. def listado():
  15.    for file in os.listdir(directorio):
  16.        archivo = directorio + os.path.sep + file
  17.        if os.path.isfile(archivo):
  18.            f.write(archivo+"\n")
  19.        else:
  20.            subdirectorios(archivo)
  21.  
  22. def subdirectorios(direc):
  23.    #print direc        
  24.    for file in os.listdir(direc):
  25.        archivo = direc + os.path.sep + file
  26.        if os.path.isfile(archivo):
  27.            f.write(archivo+"\n")
  28.        else:
  29.            subdirectorios(archivo)
  30.  
  31. listado()
  32.  
  33. f.close()
  34.  

Eso si todavía persiste ese pequeño error, por el tema del tamaño del string.
Y seroblood no el ; que viste antes era del original XDD, sin embargo el interprete se lo paso por alto, es debido a que estoy como loco programado/aprobando object pascal de la uni, dentro de poco subire todos los apuntes que tengo.
En línea

Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda!!! problema de listado de archivos
ASM
bengy 3 2,585 Último mensaje 25 Mayo 2014, 21:53 pm
por Eternal Idol
Python ver información de un fichero
Scripting
Joe Fraddy 5 2,719 Último mensaje 1 Marzo 2015, 15:38 pm
por Eleкtro
Algoritmo Genetico Python
Scripting
Camilo2001 0 4,757 Último mensaje 12 Marzo 2017, 04:21 am
por Camilo2001
¿Algoritmo para obtener todas las palabras de un fichero en python?
Programación General
pran_krr 1 2,540 Último mensaje 11 Noviembre 2019, 14:33 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines