Buen día.
Sucede que tengo un "problema" con un pequeño organizador que intento crear (quiero mediante una interface crear carpetas, seleccionar las extensiones y que luego organice las carpetas le programa), tengo practicamente todo ya.
Përo el problema sucede ahora, que estoy intentando poder hacer dicho trabajo desde otras carpetas (No desde donde tengo el .py).
Codigo:
def obtenerUbicacion():
global ruta
ruta = filedialog.askdirectory(parent=root, initialdir=os.getcwd(), title="Selecciones una carpeta:")
def moverarchivos():
global ruta
for archivo in testruta():
nombre, extensión = os.path.splitext(archivo)
for llave, dato in datos.items():
ubicacion = ruta + "/" + llave
for i in dato:
if (extensión == ".py"):
pass
elif (i == extensión):
shutil.move(archivo, ubicacion)
print(ubicacion)
def testruta():
global ruta
Archivos = os.listdir(ruta) #Obtengo los archivos existentes
archivosExistentes = []
for archivo in Archivos:
archivosExistentes.append(archivo)
print(ruta)
print(archivosExistentes)
return archivosExistentes
Eso es absolutamente todo lo que tengo sobre mover el archivo.
esta en el mismo orden que lo tengo en el programa (solo que a diferentes alturas, no todo exactamente uno debajo de otro).
Sucede que unicamente me copia los archivos de la carpeta raiz (donde tengo el .py), a la carpeta que selecciono.
Y lo que quiero, es que busque los archivos dentro de la carpeta misma donde esta la ruta, no se si me explico...
Pd: el testruta lo puse para intentar separar el codigo, y ir haciendo pruebas de donde estaba el programa en cada momento, y de donde buscaba archivos),
Todos los print que tengo, todos siempre me dan la ubicacion, y los archivos correctos de donde selecciono la carpeta (Intente en muchas carpetas y todo correcto)., pero al utilizar la funcion de moverarchivos desde el boton, quita el contenido de carpeta raiz, y se lo lleva a la carpeta nueva
Espero que se haya entendido y gracias de antemano
Hola @SlayerBur
Creo comprender lo que deseas. Lo que quieres es crear una carpeta con un nombre específico y que allí contenga archivos con extensiones específicas. Por lo que veo quieres mover esos archivos, no copiarlos, así que usa archivos de pruebas por si acaso.
#!/usr/local/bin/python3.7
import os
import shutil
import pathlib
RECURSIVE: bool = False
def mglob(extension: str, input_dir: str, target_dir: str, recursive: bool = False):
"""
Mueve todos los archivos con la extensión `extension` en
`input_dir` a `target_dir`. Si `recursive` es *True* se
tratará de bajar a los demás subniveles de directorios.
"""
if (recursive):
path_obj = pathlib.Path(input_dir).rglob("*.%s" % extension)
else:
path_obj = pathlib.Path(input_dir).glob("*.%s" % extension)
for f in path_obj:
print(f"Moviendo {input_dir}/{f} a {target_dir}/")
shutil.move(str(f), target_dir)
def main():
try:
extension = input("Extensión de los archivos objetivo: ")
except (KeyboardInterrupt, EOFError):
return
if not (extension):
print("¡Es necesario introducir la extensión!")
return
try:
input_dir = input("Directorio de entrada: ")
except (KeyboardInterrupt, EOFError):
return
if not (os.path.isdir(input_dir)):
print("%s no existe o no es un directorio válido" % input_dir)
return
if not (input_dir):
print("¡Es necesario introducir el directorio de entrada!")
return
try:
target_dir = input("Directorio de salida: ")
except (KeyboardInterrupt, EOFError):
return
if not (target_dir):
print("¡Es necesario introducir el directorio de salida!")
return
if not (os.path.exists(target_dir)):
os.makedirs(target_dir, exist_ok=True)
elif not (os.path.isdir(target_dir)):
print("%s existe pero no es un directorio válido." % target_dir)
return
mglob(extension, input_dir, target_dir, RECURSIVE)
if (__name__ == "__main__"):
main()
Realmente lo único importante en el código son las librerías y la función
mglob(...). Espero te sirva o por lo menos te dé una idea.
~ DtxdF
Hola @SlayerBur
Creo comprender lo que deseas. Lo que quieres es crear una carpeta con un nombre específico y que allí contenga archivos con extensiones específicas. Por lo que veo quieres mover esos archivos, no copiarlos, así que usa archivos de pruebas por si acaso.
#!/usr/local/bin/python3.7
import os
import shutil
import pathlib
RECURSIVE: bool = False
def mglob(extension: str, input_dir: str, target_dir: str, recursive: bool = False):
"""
Mueve todos los archivos con la extensión `extension` en
`input_dir` a `target_dir`. Si `recursive` es *True* se
tratará de bajar a los demás subniveles de directorios.
"""
if (recursive):
path_obj = pathlib.Path(input_dir).rglob("*.%s" % extension)
else:
path_obj = pathlib.Path(input_dir).glob("*.%s" % extension)
for f in path_obj:
print(f"Moviendo {input_dir}/{f} a {target_dir}/")
shutil.move(str(f), target_dir)
def main():
try:
extension = input("Extensión de los archivos objetivo: ")
except (KeyboardInterrupt, EOFError):
return
if not (extension):
print("¡Es necesario introducir la extensión!")
return
try:
input_dir = input("Directorio de entrada: ")
except (KeyboardInterrupt, EOFError):
return
if not (os.path.isdir(input_dir)):
print("%s no existe o no es un directorio válido" % input_dir)
return
if not (input_dir):
print("¡Es necesario introducir el directorio de entrada!")
return
try:
target_dir = input("Directorio de salida: ")
except (KeyboardInterrupt, EOFError):
return
if not (target_dir):
print("¡Es necesario introducir el directorio de salida!")
return
if not (os.path.exists(target_dir)):
os.makedirs(target_dir, exist_ok=True)
elif not (os.path.isdir(target_dir)):
print("%s existe pero no es un directorio válido." % target_dir)
return
mglob(extension, input_dir, target_dir, RECURSIVE)
if (__name__ == "__main__"):
main()
Realmente lo único importante en el código son las librerías y la función
mglob(...). Espero te sirva o por lo menos te dé una idea.
~ DtxdF
En si lo que queria es ver el error del codigo mio.
Que logre solucionar, era agregar la linea:
archivo = ruta + "/" +archivo
en el for de archivoExistente
Gracias :)