web-dev-qa-db-ja.com

Pandas to_csv()上書きの確認

データを分析するとき、データフレームをcsvファイルに保存し、pd.to_csv()を使用します。ただし、この関数は、同じ名前のファイルが存在するかどうかを確認せずに、新しいファイルを上書きします。 ファイルが既に存在するかどうかを確認する方法はありますか?存在する場合は、新しいファイル名を要求しますか?

システムの日時をファイル名に追加できることは知っていますが、これにより上書きが防止されますが、いつ間違えたかを知りたいです。

10
Robin Kramer

以下を試してください:

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!' 

私はこれをテストしていませんが、私が書いた以前のコードから持ち上げてコンパイルしました。これは、ファイルが他のファイルを上書きするのを単に停止します。 N.B.ファイル名変数を自分で変更してファイルを保存するか、提案された日時変数を使用する必要があります。これが何らかの形で役立つことを願っています。

7
tda

TaylorDayの提案に基づいて、関数を調整しました。次のコードでは、既存のファイルを上書きするかどうかを尋ねられます。そうでない場合は、別の名前を入力できます。次に、同じ書き込み関数が呼び出され、new_filenameが存在します。

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