FileNotFoundError: [Errno 2] No such file or directory: ‘combos.txt’

publicado por: Anonymous

Tengo un problema que no consigo sacar… Estoy trabajando en un subprocesos de un programa más grande (una opción de un menú, pero para hacerlo más organizado, pensé en utilizar subprocesos.) El caso, este módulo cada vez que trata de poner el archivo de texto, me dice que no existe, cuando se encuentra dentro de la misma ruta que dicho módulo! Se que python trabaja con rutas absolutas si no recuerdo mal, pero en este caso, estaría bien que el usuario no tuviese que escribir toda la ruta.. Dejo el código por si es de ayuda:

#IMPORTS
import os
import platform
import time

if platform.system() == "Windows":
    clear = lambda: os.system('cls')
    clear()

print("You selected module five -> Lowercase first character in passwordn")
time.sleep(1)

combo = input("Open your file: ") #USUARIO PONE NOMBRE DE ARCHIVO QUE SE ENCUENTRA EN LA MISMA RUTA QUE DICHO MÓDULO

if combo == "combos.txt": #EL USUARIO ESCRIBIRÁ EL NOMBRE DEL ARCHIVO, QUE DEBERÁ LLAMARSE IGUAL QUE EL ARCHIVO QUE DEBE SER EDITADPO "combos.txt"
    try:
        verify = open(combo, "r")
        print("File was loaded succesfully!")
    except:
        print("--Something went wrong while trying to load your file--")
    
    with open(combo, "r") as f:
        prueba = list(map(str.lower, f.readlines()))
else:
    print("This is not the correct file. Please check another time.")

Dicho módulo también tiene otro problema más abajo, para los más observadores, puede que se hayan dado cuenta de que quizás el funcionamiento del lower no funciona correctamente. He probado distintas opciones en un archivo aparte pero no funciona. Por no alargar más el post, tengo dos problemas que me no consigo solucionar:

  1. Cuando trata de editar el archivo no logra editarlo haciendo en minúsculas el contenido de dicho archivo (combos.txt).

Espero haberme explicado con claridad! =)
Cualquier duda o comentario siempre es bien recibido!

Intentaré estar atento a las respuestas 😉

Edit: El código lo he cambiado un poco a raíz de la contestación de Diego, aún así continuo teniendo el problemilla de arriba.

solución

El método lower no te funciona porque no has leido ningún string del archivo hasta ese punto, lo que tienes en verify es un wrapper que te permite acceder al contenido del archivo, pero tienes que usar otros métodos como read o readlines para accederlo y luego aplicar lower a todo el contenido.

with open(combo, 'r') as f:

    # usando read, creo que esta forma es la mejor
    prueba = f.read()
    prueba = prueba.lower()

    # usando map
    prueba = list(map(str.lower, f.readlines()))

    # usando list-comprehension
    prueba = [line.lower() for line in f.readlines()]

Si quieres guardar los cambios en el archivo combos.txt debes abrir el archivo nuevamente en modo de escritura w y escribir el contenido.

with open(combo, 'w') as f:
    f.write(verify)

Ahora, este script que usas SI encuentra el archivo combos.txt cuando están en la misma carpeta, pero como dices que es un subproceso puede que python está buscando el archivo en la raiz de donde se lanzó el proceso principal.

Puedes verificar esto usando os y mirando en qué directorio está buscando python

import os
os.path.realpath('.')
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *