当 pandas 数据帧到临时文件 csv 时权限被拒绝

Permission denied when pandas dataframe to tempfile csv

我正在尝试将 pandas 数据帧存储到 csv 格式的临时文件中(在 windows 中),但遇到了以下问题:

[Errno 13] 权限被拒绝:'C:\Users\Username\AppData\Local\Temp\tmpweymbkye'

import tempfile
import pandas

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

其中 df 是数据帧。我也试过将临时目录更改为一个我确定我有写权限的目录:

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)

我收到与之前相同的错误消息。该文件未在其他任何地方打开。

检查您的权限,根据 this post,您可以 运行 通过右键单击您的程序并 运行 作为管理员。

我们可以使用to_csv命令以CSV格式导出DataFrame。请注意,下面的代码默认会将数据保存到当前工作目录中。我们可以通过在文件中添加文件夹名称和斜线来将其保存到不同的文件夹

verticalStack.to_csv('foldername/out.csv').

检查您的工作目录以确保 CSV 文件正确写入,并且您可以打开它!如果需要,请尝试将其重新放入 python 以确保其正确导入。

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

ref

TemporaryFile() 不同,mkstemp() 的用户有责任在使用完临时文件后将其删除。

使用此函数可能会在您的程序中引入安全漏洞。当您开始使用文件名 it returns 做任何事情时,其他人可能已经先发制人了。 mktemp() 用法可以很容易地替换为 NamedTemporaryFile(),将其传递给 delete=False 参数。

Read more.

导出到 CSV 后,您可以使用 temp.close() 关闭文件。

with tempfile.NamedTemporaryFile(delete=False) as temp:
    df.to_csv(temp.name + '.csv')
    temp.close()

有时,它给出该错误仅仅是因为存在另一个同名文件并且它无权删除较早的文件并将其替换为新文件。

  1. 因此,要么在保存文件时以不同的方式命名文件, 或
  2. 如果您正在使用 Jupyter Notebook 或其他类似环境,请在执行将文件读入内存的单元格后删除该文件。因此,当您执行将其写入机器的单元格时,不存在具有该名称的其他文件。

有时候,您需要检查文件路径是否有读写文件的权限。特别是当你使用相对路径时。

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

我遇到了同样的错误消息,在 file_path 中添加“/df.csv”后问题得到解决。

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

只需提供有效路径和文件名

例如:

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

据我所知,当有人试图保存已经保存并当前在后台打开的文件时会弹出此错误。

您可以尝试先关闭这些文件,然后重新运行代码。

我遇到了同样的错误。我只是还没有保存我的整个 python 文件。一旦我在 VS 代码中将我的 python 文件作为“insertyourfilenamehere”.py 保存到文档(在我的路径中),我再次 运行 我的代码并且我能够将我的数据框保存为 csv文件.