Quiero buscar un archivo CSV específico en mi directorio predeterminado. Si se encuentra el archivo, la escritura está hecha y el contenido debe agregarse al archivo; de lo contrario, el archivo debe crearse.

    def set_defaultfile(self):

        file = "C:/Users/PycharmProjects/MindNotez/"
        df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
        for file in os.listdir(file):
            if file.endswith("Note.csv"):
                file_content = file + "Note.csv"
                return file_content
            else:
                df = pd.DataFrame(data=df_content)
                df.to_csv(file + "Note.csv", sep=",", index=False)
                file_content = file + "Note.csv"
                return file_content

Utilizo las declaraciones de retorno para que la variable pueda ser utilizada por otras funciones. Estaba buscando una mejor función de 'búsqueda' para el archivo, pero solo encontré cómo buscar todos los archivos con un 'final' determinado (por ejemplo, ".txt").

El resultado de esta función tampoco es la creación de un archivo llamado "Note.csv", pero el archivo siempre se llama ".ideaNote.csv". ¿Alguien puede explicarme qué o por qué es ese prefijo?

Como siempre, ¡muchas gracias por tus respuestas!

Saludos

Alex

0
Alex_P 16 oct. 2018 a las 16:54

2 respuestas

La mejor respuesta

Yo mismo encontré una solución satisfactoria.

Yo uso este código en su lugar:

    def set_defaultfile(self):

        file = "C:/Users/PycharmProjects/MindNotez/Note.csv"
        df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
        try:
            with open(file, "r") as test:
                f_reader = csv.DictReader(test, delimiter=',')
                headers = f_reader.fieldnames
                if  headers == df_content:

                print("Headers match!")
        except FileNotFoundError:
            print("File created!")
            with open(file, "a+") as f:
                f_writer = csv.DictWriter(f, fieldnames=df_content)
                f_writer.writeheader()
                f.close()

        file_content = "C:/Users/PycharmProjects/MindNotez/Note.csv"
        return file_content

Sin embargo, todavía me interesa por qué se crea un archivo con el prefijo '.idea' en mi primera opción .

0
Alex_P 18 oct. 2018 a las 13:53

Con respecto a la .idea adjunta, no estoy seguro de por qué, pero supongo que el problema es que hay un archivo o carpeta llamado .idea que se toma como prefijo. Expliquemos por qué creo que esto es lo que está sucediendo. Imagina que solo hay un archivo llamado .idea en la carpeta, luego el ciclo for solo pasará una vez (ya que asumimos que no hay más elementos en la carpeta) dando como resultado file = '.idea', por lo que el if() falla y va a else.

El problema es que debido a que usó el mismo nombre para la ruta y para el elemento en el ciclo, Python selecciona el último, no el primero. Luego, dentro de la parte else, tendremos:

file_content = file + "Note.csv"

Y esto es equivalente a

file_content = ".idea" + "Note.csv"

No es lo que esperabas. Para resolverlo con la versión anterior del código, use esto (comenté las líneas originales de código que modifiqué):

# file = "C:/Users/PycharmProjects/MindNotez/"
file_path = "C:/Users/PycharmProjects/MindNotez/"
    df_content = {"title": [], "author": [], "year": [], "others": [], "note": []}
    # for file in os.listdir(file):
    for file in os.listdir(file_path):
        if file.endswith("Note.csv"):
            # file_content = file + "Note.csv"
            file_content = file_path + "Note.csv"
            return file_content
        else:
            df = pd.DataFrame(data=df_content)
            # df.to_csv(file + "Note.csv", sep=",", index=False)
            df.to_csv(file_path + "Note.csv", sep=",", index=False)
            file_content = file + "Note.csv"
            return file_content

Intente esto para ver si mi suposición es correcta. Espero que esto haya ayudado a resolver la duda.

0
VictorHMartin 18 oct. 2018 a las 15:18