python - 打开用于写入和读取大文件的Python

标签 python file large-files

我正在尝试使用 os.openmmapfrom_buffer() 读取大型二进制文件 (>5 GB)。

运行fd = os.open(filePath, O_RDWR) 引发错误OSError: [Errno 22] Invalid argument: H:\\xyz.wdp。我意识到问题在于文件太大,因为使用类似但较小的文件,O_WRONLYO_RDONLY,它起作用了。 不幸的是,如果我使用 O_WRONLYO_RDONLY,则 from_buffer() 函数的访问被拒绝(TypeError: mmap can't edit a只读内存映射。)。

我的示例代码是:

class StructData(Structure):
    _pack_ = 1
    _fields_ = [('bin', c_ubyte)]

fd = os.open(filePath, os.O_RDWR)
mmap_file = mmap.mmap(fd, length=80, access=mmap.ACCESS_WRITE, offset=0)
d_array = StructData*80
data = d_array.from_buffer(mmap_file)

你能帮我解决这个问题吗?我想补充一点,我处理大文件,并且我需要它运行得非常快,我想避免使用 struct.unpack 等。

谢谢!

最佳答案

从路径来看,您似乎使用的是 Windows。 文档( https://docs.python.org/2/library/os.html#os.open )说应该使用 os.O_BINARY 在 Windows 上以二进制模式打开文件。 您尝试过以下方法吗? (如果您可能正在创建该文件...)

fd = os.open(filePath, os.O_RDWR | os.O_CREAT | os.O_TRUNC | os.O_BINARY)

不知道Windows中关于大文件支持的情况: https://docs.python.org/2/library/posix.html

关于python - 打开用于写入和读取大文件的Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41100808/

相关文章:

python - 如何将 Flask 出色的调试日志消息写入生产中的文件?

python - Unicode解码错误: 'ascii' codec can't decode byte 0xe2 in position 139: ordinal not in range(128)

android - Android 设备上的屏幕截图文件保存时间较长

css - 为每个页面设置唯一的 css 文件(也使用全局文件)是一个很好的做法吗?

arrays - 使用数组比较和共享多个工作簿和工作表之间的数据

python - 如何从多进程(子进程)获取django.db.connection.queries数据?

python - 如何在 Python 中转换指数并摆脱 'e+' ?

c++ - 用 C++ 打开 2 个数据文件

linux - 远程 linux 服务器到远程 linux 服务器大型稀疏文件复制 - 如何?

python - 想要在另一列中打印每封电子邮件的最大条目