Python_OSError:[Errno 28] 设备上没有剩余空间

27
我将以下 pandas 数据框导出为CSV文件时遇到了错误。我的硬盘有足够的空间。
OSError: [Errno 28] No space left on device

这可能是什么原因呢?先行致谢。


2
@khalid,正如之前指出的那样,请清除您的缓存/tmp目录。为了更清楚地理解,请查看这里https://dev59.com/Jmw05IYBdhLWcg3w11Qk - sync11
@Khalid,你使用的是哪个Windows操作系统? - sync11
@DataLeo Windows 7 - Khalid
4
打开“运行”并输入“%temp%”,这会导航到临时文件夹。选择全部并删除它们。如果有一些无法删除,不用担心。重新启动计算机并尝试保存CSV文件。如果问题仍然存在,建议进行磁盘碎片整理,操作步骤可在此处找到:https://support.microsoft.com/zh-cn/help/17126/windows-7-improve-performance-defragmenting-hard-disk - sync11
@dataLeo 这就是问题所在。我做不到。我想问你是否知道如何使用Python代码删除临时文件。 - Khalid
显示剩余8条评论
5个回答

2
晚回答了,但或许有用。
我遇到了类似的问题:
OSError: [Errno 28] No space left on device:

但是,我有足够的空间:


$ df -h
Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
/dev/dm-0                   5,6G    3,2G  2,1G  62% /
udev                         10M       0   10M   0% /dev
tmpfs                       4,8G    481M  4,3G  10% /run
tmpfs                        12G    8,0K   12G   1% /dev/shm
tmpfs                       5,0M       0  5,0M   0% /run/lock
tmpfs                        12G       0   12G   0% /sys/fs/cgroup
tmp                         945M     23M  858M   3% /tmp
var                         5,6G    3,3G  2,0G  64% /var
data                         20G     11G  8,6G  56% /data

事实上,这不是一个“重量”问题,而是一个“数量”问题。
证据如下:
$ df -hi
Sys. de fichiers          Inœuds IUtil. ILibre IUti% Monté sur
/dev/dm-0                   367K   307K    61K   84% /
udev                        3,0M    365   3,0M    1% /dev
tmpfs                       3,0M    597   3,0M    1% /run
tmpfs                       3,0M      2   3,0M    1% /dev/shm
tmpfs                       3,0M      9   3,0M    1% /run/lock
tmpfs                       3,0M     13   3,0M    1% /sys/fs/cgroup
tmp                          61K   5,1K    56K    9% /tmp
var                         367K    95K   273K   26% /var
data                        1,3M   1,3M      0  100% /data

已经没有更多的inode(文件)空间。

这显然是由于会话管理引起的:

$ du --max-depth=1 --inodes -h /data/my-python-program/data/
1,2M    /data/base-eelv/data/sessions
178 /data/base-eelv/data/medias

快速解决方法是清空会话目录。

彻底解决方法是自动清理,但目前我还没有搜索如何实现这一点。


1

假设您的磁盘确实有足够的空间,即磁盘空间没有任何问题(临时文件已删除,操作系统正确报告了可用空间)...

在使用Pandas导出数据时,特别是当数据框过大以至于无法正常处理写入操作时,会触发此错误。您可以尝试将数据框分批写入CSV文件中。手动操作如下:

    INTERVAL = 50
    num_rows = len(df)
    final_index = num_rows - 1
    indices = list(range(0, final_index, INTERVAL))
    indices.append(final_index)
    

    for i in range(len(indices) - 1):
        start = indices[i]
        end = indices[i+1]        
        table_segment = df.iloc[start:end+1] 
        if i == 0:
            table_segment.to_csv("./test2.csv")
        else:
            table_segment.to_csv("./test2.csv", mode = 'a', header = False)

编辑:或者,对于pandas数据框中的to_csv函数,(新的?)chunksize参数也可以实现相同的功能:

df.to_csv(path_or_buf="./test3.csv", chunksize=INTERVAL)

最后,这里有一个很好的答案通常解释了这个错误:Python causing: IOError: [Errno 28] No space left on device: '../results/32766.html' on disk with lots of space

0

尝试截断/var/log目录下的.log文件

示例:

sudo truncate -s 0 /var/log/celery/*log
sudo truncate -s 0 /var/www/html/app/stderr.log

0
任何情况下,如果由于空间不足而无法将与I/O操作关联的数据或元数据写入任何位置,则会触发ENOSPC(“设备上没有剩余空间”)错误。这并不总是指磁盘空间-它可能意味着物理磁盘空间、逻辑空间(例如最大文件长度)、某个数据结构或地址空间中的空间。例如,如果目录表(vfat)中没有空间或没有i节点,则可能会出现这种情况。这大致意味着“我找不到可以记录这个的位置”。
来源:Python causing: IOError: [Errno 28] No space left on device: '../results/32766.html' on disk with lots of space 此外:
结果证明,对我来说最好的解决方案就是重新格式化驱动器。重新格式化后,所有这些问题都不再是问题。
可能的解决方案:
  • 重新格式化您的驱动器(其他问题的 OP 尚未更新他/她的答案)
  • 使用 rm -r /tmp/ 删除 \tmp 目录

0

我正在使用Docker容器,并通过增加其交换空间来绕过错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接