在 Python 中以 4GB 的写入限制绕过 OSError 'File too large'?
Getting around OSError 'File too large' with 4GB writing limit in Python?
我正在使用分块(Python 3.7.6 在 iPython 和 Mac OS).
合并后的文件大小为 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)
通过阅读类似问题 (here and here),似乎在写入超过 4 GB 的文件时可能存在寻址问题。由于问题出在 OS,我不知道接下来要尝试什么。感谢您的帮助!
您的问题与 macOS 无关。它与您要写入的驱动器的格式有关。 macOS 对文件大小没有限制,但它有两个默认文件系统:HFS+ 和 APFS。它们都支持 EB 级别的文件大小。一段时间内我们将不需要担心文件大小。
你的问题暗示你想写入闪存驱动器。 (编辑。根据说明,您正在写入闪存驱动器。)问题几乎可以肯定是闪存驱动器被格式化为 FAT32,由于格式的 32 位性质,它的最大文件大小约为 4 GB。
如果您要将数据移动到另一台本身不是 FAT32 的计算机(例如 Windows 使用 NTFS 或另一台 Mac 使用 HFS+ 或 APFS),那么您应该重新格式化驾驶。如果另一台计算机是 FAT32,那你就不走运了(现在你应该升级了)。
要重新格式化您的闪存驱动器:
将您不想丢失的任何内容复制到另一个驱动器(或您的本地计算机)。 重新格式化会擦除驱动器:如果您不想丢失某些东西,请不要将其保留在您要擦除的驱动器上。
在您的 Mac 上,打开 磁盘工具。在左边的尺寸中,在“外部”选项卡下,select 插入后的闪存驱动器,然后在右上角单击擦除。
为您的驱动器输入一个新名称。在“格式”下,我会推荐 selecting “ExFAT”。如果您 select“APFS”或“MacOS 扩展”,Windows 计算机将无法读取您的驱动器(没有解决方法)。不要 select “Windows NT 文件系统”,您将无法在 Mac 上写入它。我也会保留默认的 GUID 分区映射方案。
完成重新格式化后,更新您的 df.to_csv(path)
路径,它应该可以在没有 OSError
的情况下正常写入。当然,写作可能需要一些时间。在末尾传递带有 .gz
或 .xz
的 path
可能是策略性的,以使用压缩并节省 IO 时间(以 CPU 时间为代价)。
请注意,如果您想在较旧的(至少在软件方面)Linux 机器上读取 exFAT,您将收到错误消息,您将需要 install exFAT 实用程序。但是较新的 Linux 内核应该嵌入了 exFAT 支持。
我正在使用分块(Python 3.7.6 在 iPython 和 Mac OS).
合并后的文件大小为 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)
通过阅读类似问题 (here and here),似乎在写入超过 4 GB 的文件时可能存在寻址问题。由于问题出在 OS,我不知道接下来要尝试什么。感谢您的帮助!
您的问题与 macOS 无关。它与您要写入的驱动器的格式有关。 macOS 对文件大小没有限制,但它有两个默认文件系统:HFS+ 和 APFS。它们都支持 EB 级别的文件大小。一段时间内我们将不需要担心文件大小。
你的问题暗示你想写入闪存驱动器。 (编辑。根据说明,您正在写入闪存驱动器。)问题几乎可以肯定是闪存驱动器被格式化为 FAT32,由于格式的 32 位性质,它的最大文件大小约为 4 GB。
如果您要将数据移动到另一台本身不是 FAT32 的计算机(例如 Windows 使用 NTFS 或另一台 Mac 使用 HFS+ 或 APFS),那么您应该重新格式化驾驶。如果另一台计算机是 FAT32,那你就不走运了(现在你应该升级了)。
要重新格式化您的闪存驱动器:
将您不想丢失的任何内容复制到另一个驱动器(或您的本地计算机)。 重新格式化会擦除驱动器:如果您不想丢失某些东西,请不要将其保留在您要擦除的驱动器上。
在您的 Mac 上,打开 磁盘工具。在左边的尺寸中,在“外部”选项卡下,select 插入后的闪存驱动器,然后在右上角单击擦除。
为您的驱动器输入一个新名称。在“格式”下,我会推荐 selecting “ExFAT”。如果您 select“APFS”或“MacOS 扩展”,Windows 计算机将无法读取您的驱动器(没有解决方法)。不要 select “Windows NT 文件系统”,您将无法在 Mac 上写入它。我也会保留默认的 GUID 分区映射方案。
完成重新格式化后,更新您的
df.to_csv(path)
路径,它应该可以在没有OSError
的情况下正常写入。当然,写作可能需要一些时间。在末尾传递带有.gz
或.xz
的path
可能是策略性的,以使用压缩并节省 IO 时间(以 CPU 时间为代价)。
请注意,如果您想在较旧的(至少在软件方面)Linux 机器上读取 exFAT,您将收到错误消息,您将需要 install exFAT 实用程序。但是较新的 Linux 内核应该嵌入了 exFAT 支持。