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

问题描述 投票:0回答:8

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

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

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)

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

python csv pandas temporary-files
8个回答
11
投票

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

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

9
投票

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

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

verticalStack.to_csv('foldername/out.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
投票

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

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

2
投票

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

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

1
投票

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


0
投票

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

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


0
投票

您可以简单地写:

with tempfile.NamedTemporaryFile(mode="w", dir="path_to_file", suffix=".csv", delete=False) as temp:
  df.to_csv(temp.name)

参数“dir”是可选的。


-6
投票

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

例如:

final_df.to_csv('D:\Study\Data Science\data sets\MNIST\sample.csv')
© www.soinside.com 2019 - 2024. All rights reserved.