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

the*_*pin 6 python csv temporary-files pandas

我正在尝试以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)
Run Code Online (Sandbox Code Playgroud)

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

tempfile.tempdir='D:/Username/Temp/'
Run Code Online (Sandbox Code Playgroud)

这给了我同样的错误信息

编辑:

当我将循环更改为:时,临时文件似乎被锁定以进行编辑

with tempfile.NamedTemporaryFile() as temp:
    df.to_csv(temp.name + '.csv')
Run Code Online (Sandbox Code Playgroud)

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

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

with tempfile.NamedTemporaryFile(suffix='.csv') as temp:
    training_data.to_csv(temp.name)
Run Code Online (Sandbox Code Playgroud)

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

hm6*_*hm6 11

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

df.to_csv('C:/Users/../df.csv', index = False)
Run Code Online (Sandbox Code Playgroud)


Ram*_*che 5

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

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

verticalStack.to_csv('foldername/out.csv').
Run Code Online (Sandbox Code Playgroud)

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

newOutput = pd.read_csv('out.csv', keep_default_na=False, na_values=[""])
Run Code Online (Sandbox Code Playgroud)

参考

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

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

阅读更多

导出后,CSV您可以使用temp.close().

with tempfile.NamedTemporaryFile(delete=False) as temp:
    df.to_csv(temp.name + '.csv')
    temp.close()
Run Code Online (Sandbox Code Playgroud)