Anuncios Google

shutil.move por extensión en python

Hola. Tengo una duda con python y el modulo shutil, espero alguien sepa python y me pueda ayudar:

Lo que busco primero es crear un directorio y después mover todos los archivos que se encuentren en otro directorio por extensión a esa carpeta. En comandos de Unix seria algo así:

mkdir /home/usuario/directorioNuevo

cp /home/usuario/musica/*.mp3 /home/usuario/directorioNuevo

Eso lo quiero hacer pero en Python. Ahora uso shutil.move. Pero solo me funciona a la hora de mover un archivo(con nombre y extensión). No deja mover solo archivos por extensión.

Ejemplo de código funcional con nombre de archivo y extensión:

directorioOriginal = os.getcwd()
directorio = os.path.join(directorioOriginal, 'Peliculas')
 
if not os.path.isdir(directorio):
    os.mkdir(directorio)
    os.chdir(directorioOriginal)
    shutil.move("video.3gp", directorio)

Pero lo que quiero es que se muevan todos por extensión, al editarlo he querido hacerlo así, pero no es posible:

directorioOriginal = os.getcwd()
directorio = os.path.join(directorioOriginal, 'Peliculas')
 
if not os.path.isdir(directorio):
    os.mkdir(directorio)
    os.chdir(directorioOriginal)
    shutil.move("*.3gp", directorio)

Me salta este error:

 

Traceback (most recent call last):

  File "./fileR.py", line 17, in <module>

    shutil.move("*.3gp", directorio)

  File "/usr/lib/python2.6/shutil.py", line 260, in move

    copy2(src, real_dst)

  File "/usr/lib/python2.6/shutil.py", line 95, in copy2

    copyfile(src, dst)

  File "/usr/lib/python2.6/shutil.py", line 50, in copyfile

    with open(src, 'rb') as fsrc:

IOError: [Errno 2] No such file or directory: '*.3gp'

 

 

Espero me puedan ayudar con ese modulo, y si no es posible hacerlo, me dieran alguna idea de que otro modulo puedo usar.

Un saludo


 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

Debes leer los ficheros que

Debes leer los ficheros que quieras mover del directorio y meterlos en una tabla, luego es recorrer esta tabla y ejecutar el comando move con cada elemento.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de iRVing_Prog

Python

lo de leer los ficheros no lo he intentado, no se como hacerlo, pero lo que sigue si, y me da un error.

lo que hice fue crear una lista(son las tablas en python si no me equivoco) de una serie de posibles extensiones que existen:

lvideos = ["*.mp3", "*.mp4", "*.jpg"]

Después trate de leer esta lista desde esta linea:

    shutil.move(lvideos[0:2], directorio)

Pero me dice que no es valido incluir listas en esa linea.

Ahora lo de listar todos los archivos por extensión:

lista = glob.glob("*.mp3", "*.mp4", "*.jpg")

Pero en todos casos solo funciona si solo meto un string en el shutil.move, ya que si trato de recorrer la lista(slicing) me marca error, Alguna ejemplo de código?

Gracias

EDITO:

He intentado con el bucle for, pero tampoco me funciona:

videos = ["*.mp3", "*.flv", "*.jpg"]
 
for elemento in videos:
 
    shutil.move(elemento, directorio)

 


 

Imagen de pspgorrister

move no te va a funcionar con

move no te va a funcionar con máscaras, no me refiero a que pongas las distintas máscaras en move, sino que leas los ficheros de una determinada extensión (o de las extesiones que sean) y lo metas en un array, luego recorres ese array y vas moviendo cada elemento uno a uno.


LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.

Imagen de iRVing_Prog

tendrás alguna forma de ayudar con código

Es que no logro hacer que el proceso sea de corrido por así decirlo.

M2 = glob.glob("*.mp3")
 
shutil.move(M2[0], directorio)

Primero listo todos los archivos con extensión .mp3 después los voy llamando con shutil.move pero solo llamo al primer elemento de la lista que es "0" ya que el slicing no me es permitido por ejemplo [0:20]

Me funciona si solo pongo un numero, pero si hago slicing [:]. Entonces como haría para mover todos? Una linea de esas por cada elemento que haya en la lista?

Alguna forma de que se le fuera sumando un numero para que recorra todos los numeros que hay y copie todos los archivos solo con esa linea? tal ves una función.

Gracias


 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.