打开以写入和读取大文件 Python
Open for writing and reading a large file Python
我正在尝试使用 os.open
、mmap
和 from_buffer()
.
读取大型二进制文件 (>5 GB)
运行 fd = os.open(filePath, O_RDWR)
出现错误 OSError: [Errno 22] Invalid argument: H:\xyz.wdp
。我意识到问题是文件太大了,因为使用类似但更小的文件,O_WRONLY
或 O_RDONLY
,它起作用了。
不幸的是,如果我使用 O_WRONLY
或 O_RDONLY
,from_buffer()
函数 (TypeError: mmap can't modify a readonly memory map.
) 的访问被拒绝。
我的示例代码是:
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
我正在尝试使用 os.open
、mmap
和 from_buffer()
.
运行 fd = os.open(filePath, O_RDWR)
出现错误 OSError: [Errno 22] Invalid argument: H:\xyz.wdp
。我意识到问题是文件太大了,因为使用类似但更小的文件,O_WRONLY
或 O_RDONLY
,它起作用了。
不幸的是,如果我使用 O_WRONLY
或 O_RDONLY
,from_buffer()
函数 (TypeError: mmap can't modify a readonly memory map.
) 的访问被拒绝。
我的示例代码是:
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