web-dev-qa-db-ja.com

pandas dataframe to tempfile csvの場合、アクセスが拒否されました

pandasデータフレームをcsv形式(Windowsの場合)の一時ファイルに保存しようとしていますが、次のような問題があります。

[エラー番号13]権限が拒否されました: 'C:\ Users\Username\AppData\Local\Temp\tmpweymbkye'

import tempfile
import pandas

with tempfile.NamedTemporaryFile() as temp:
    df.to_csv(temp.name)

ここで、dfはデータフレームです。 tempディレクトリを変更して、書き込み権限があることも確認しました。

tempfile.tempdir='D:/Username/Temp/'

これは私に同じエラーメッセージを与えます

編集:

ループを次のように変更すると、一時ファイルが編集用にロックされているようです。

with tempfile.NamedTemporaryFile() as temp:
    df.to_csv(temp.name + '.csv')

ファイルを一時ディレクトリに書き込むことはできますが、一時ファイルではなくなったため、ループの最後で自動的に削除されません。

ただし、コードを次のように変更した場合:

with tempfile.NamedTemporaryFile(suffix='.csv') as temp:
    training_data.to_csv(temp.name)

以前と同じエラーメッセージが表示されます。ファイルは他の場所では開かれていません。

8
thebigspin

権限を確認し、 this の投稿に従って、右クリックしてプログラムを管理者として実行し、管理者として実行できます。

To_csvコマンドを使用して、DataFrameをCSV形式でエクスポートできます。以下のコードはデフォルトでデータを現在の作業ディレクトリに保存することに注意してください。ファイルにフォルダ名とスラッシュを追加することで、別のフォルダに保存できます

_verticalStack.to_csv('foldername/out.csv').
_

作業ディレクトリをチェックして、CSVが適切に書き出されていること、およびCSVを開けることを確認してください。必要に応じて、pythonに戻して、正しくインポートされることを確認してください。

_newOutput = pd.read_csv('out.csv', keep_default_na=False, na_values=[""])
_

参照

TemporaryFile()とは異なり、mkstemp()のユーザーは、一時ファイルの使用後に一時ファイルを削除する必要があります。

この関数を使用すると、プログラムにセキュリティホールが生じる可能性があります。返されたファイル名を使って何でもできるようになるまでに、誰かがあなたを殴り倒したのかもしれません。 mktemp()の使用法はNamedTemporaryFile()で簡単に置き換えることができ、これに_delete=False_パラメータを渡します。

続きを読む

CSVにエクスポートした後、temp.close()を使用してファイルを閉じることができます。

_with tempfile.NamedTemporaryFile(delete=False) as temp:
    df.to_csv(temp.name + '.csv')
    temp.close()
_
3
RaminNietzsche

同じエラーメッセージが表示され、file_pathに「/df.csv」を追加すると問題が解決しました。

df.to_csv('C:/Users/../df.csv', index = False)
2
hm6

場合によっては、ファイルのパスを確認する必要があります。これには、ファイルの読み取りと書き込みを行うための適切な権限があるかどうかを確認します。特に相対パスを使用する場合。

xxx.to_csv('%s/file.csv'%(file_path), index = False)
1
saneryee

場合によっては、同じ名前の別のファイルが存在するというエラーが発生し、以前のファイルを削除して新しいファイルに置き換える権限がありません。

  1. そのため、保存中にファイルに別の名前を付けます。または
  2. Jupyter Notebookまたは他の同様の環境で作業している場合は、メモリに読み込むセルを実行した後にファイルを削除します。そのため、マシンに書き込むセルを実行すると、その名前を持つ他のファイルは存在しません。 。
1

有効なパスとファイル名を指定するだけです

例えば:

final_df.to_csv('D:\Study\Data Science\data sets\MNIST\sample.csv')
0
Shaurya Singh