当pandas数据帧到tempfile csv时权限被拒绝

时间:2017-04-07 16:40:27

标签: python csv pandas temporary-files

我正在尝试以csv格式(在Windows中)将pandas数据帧存储到临时文件中,但是受到以下命令:

[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')

我可以在temp目录中编写该文件,但是在循环结束时不会自动删除它,因为它不再是临时文件。

但是,如果我将代码更改为:

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

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

6 个答案:

答案 0 :(得分:1)

检查您的权限,并根据this帖子,您可以通过右键单击并以管理员身份运行,以管理员身份运行您的程序。

我们可以使用to_csv命令以CSV格式导出DataFrame。请注意,默认情况下,下面的代码会将数据保存到当前工作目录中。我们可以通过将foldername和斜杠添加到文件

来将其保存到不同的文件夹中
verticalStack.to_csv('foldername/out.csv').

查看您的工作目录以确保CSV正确写出,并且您可以打开它!如果你愿意,可以尝试将其恢复到python中以确保它正确导入。

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

ref

TemporaryFile()不同,mkstemp()的用户负责在完成后删除临时文件。

使用此功能可能会在程序中引入安全漏洞。当你开始使用它返回的文件名做任何事情时,其他人可能会打败你。可以使用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 :(得分:1)

有时,它会给出该错误,因为有另一个具有相同名称的文件,并且它无权删除先前的文件并将其替换为新文件。

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

答案 2 :(得分:1)

我遇到了相同的错误消息,并将“ /df.csv”添加到file_path之后,该问题已解决。

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

答案 3 :(得分:0)

有时,如果您有权读取和写入文件,则需要检查文件路径。特别是当你使用相对路径时。

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

答案 4 :(得分:0)

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

例如:

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

答案 5 :(得分:0)

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

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