在python中使用4gb写入限制绕过oserror“文件太大”?

pn9klfpd  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(533)

我正在使用分块(ipython和mac os中的python 3.7.6)将大约200个csv文件(最多10到200 mb)合并到闪存驱动器上的单个文件中。
它的大小达到了4.29 gb的组合文件。当我试图在上面写另一个文件(大小约150 mb)时,我会 OSError: [Errno 27] File too large . 代码如下:

import pandas as pd
import os

paths_to_combine = ['file1.csv', ..., 'file200.csv']   # contains 200 files
output_path = 'all.csv'

for file in all_result_filenames:
    chunk_container = pd.read_csv(file, chunksize=50000)
    for chunk in chunk_container:
        chunk.to_csv(output_path, mode="a", header=False)

通过阅读类似的问题(这里和这里),似乎在写入4 gb以上的文件时可能存在寻址问题。因为问题出在操作系统上,我一直在想下一步该怎么做。谢谢你的帮助!

jum4pzuy

jum4pzuy1#

你的问题与macos无关。这与要写入的驱动器的格式有关。macos对文件大小没有限制,但它有两个默认文件系统:hfs+和apfs。它们都支持文件大小达到exabyte级别。我们在一段时间内不需要担心文件大小。
您的问题意味着您想写入闪存驱动器(编辑根据澄清,您正在写入闪存驱动器。)几乎可以肯定的是,闪存驱动器的格式为fat32,由于该格式的32位特性,其最大文件大小约为4 gb。
如果要将数据移动到一台本身不是fat32的单独计算机上(例如,移动到使用ntfs的windows或另一台使用hfs+或apfs的mac),则应重新格式化驱动器。如果另一台电脑是fat32,你就不走运了(现在你应该升级了)。
要重新格式化闪存驱动器,请执行以下操作:
将您不想丢失的任何内容复制到另一个驱动器(或本地计算机)。重新格式化将擦除驱动器:如果您不想丢失某些内容,请不要将其保留在要擦除的驱动器上。
在mac上,打开磁盘实用程序。在左侧的“外部”选项卡下,选择插入后的闪存驱动器,然后在右上角单击擦除。
为您的驱动器输入一个新名称。在“格式”下,我建议选择“exfat”。如果选择“apfs”或“mac os extended”,windows计算机将无法读取您的驱动器(没有解决方法)。不要选择“windows nt文件系统”,您将无法在mac上对其进行写入。我还将保留默认的guid分区Map方案。
完成重新格式化后,更新您的 df.to_csv(path) 路径,并且在没有 OSError . 当然,写作可能需要一些时间。通过一项决议可能具有战略意义 path 具有 .gz.xz 最后使用压缩并节省io时间(以牺牲cpu时间为代价)。
请注意,如果您想在较旧的(至少在软件方面)linux机器上读取exfat,您将得到一个错误,并且需要安装exfat实用程序。但较新的linux内核应该嵌入exfat支持。

相关问题