web-dev-qa-db-fra.com

Pandas to_csv () recherche d'écrasement

Lorsque j'analyse des données, j'enregistre mes cadres de données dans un fichier csv et j'utilise pd.to_csv() pour cela. Cependant, la fonction (over) écrit le nouveau fichier, sans vérifier s'il en existe un du même nom. Existe-t-il un moyen de vérifier si le fichier existe déjà, et si oui, demandez un nouveau nom de fichier?

Je sais que je peux ajouter la date/heure du système au nom de fichier, ce qui empêchera tout écrasement, mais je voudrais savoir quand j'ai fait l'erreur.

10
Robin Kramer

Essayez ce qui suit:

import glob
import pandas as pd

# Give the filename you wish to save the file to
filename = 'Your_filename.csv'

# Use this function to search for any files which match your filename
files_present = glob.glob(filename)


# if no matching files, write to csv, if there are matching files, print statement
if not files_present:
    pd.to_csv(filename)
else:
    print 'WARNING: This file already exists!' 

Je n'ai pas testé cela mais il a été levé et compilé à partir d'un code précédent que j'ai écrit. Cela arrêtera simplement les fichiers écrasant les autres. N.B. vous devrez modifier vous-même la variable de nom de fichier pour ensuite enregistrer le fichier, ou utiliser une variable datetime comme vous l'avez suggéré. J'espère que cela aide d'une certaine manière.

7
tda

Sur la base de la suggestion de TaylorDay, j'ai fait quelques ajustements à la fonction. Avec le code suivant, il vous est demandé si vous souhaitez remplacer un fichier existant. Sinon, vous êtes autorisé à saisir un autre nom. Ensuite, la même fonction d'écriture est appelée, qui vérifiera à nouveau si le new_filename existe.

from os import path
import pandas as pd
def write_csv_df(path, filename, df):
    # Give the filename you wish to save the file to
    pathfile = os.path.normpath(os.path.join(path,filename))

    # Use this function to search for any files which match your filename
    files_present = os.path.isfile(pathfile) 
    # if no matching files, write to csv, if there are matching files, print statement
    if not files_present:
        df.to_csv(pathfile, sep=';')
    else:
        overwrite = raw_input("WARNING: " + pathfile + " already exists! Do you want to overwrite <y/n>? \n ")
        if overwrite == 'y':
            df.to_csv(pathfile, sep=';')
        Elif overwrite == 'n':
            new_filename = raw_input("Type new filename: \n ")
            write_csv_df(path,new_filename,df)
        else:
            print "Not a valid input. Data is NOT saved!\n"
3
Robin Kramer