是否可以将mmap文件视为字节对象?

时间:2018-02-17 01:55:23

标签: python python-2.7 dropbox-api mmap large-files

请考虑以下代码,其中big_file无法在内存中的文件的路径。

f = os.open(big_file, os.O_RDONLY)
data = mmap.mmap(f, 0, access=mmap.ACCESS_READ)

此时,data的行为类似于带有切片表示法或普通文件操作的字符串。但是,我正在编写一个API,希望传入类型bytes的对象,如果我尝试传递变量data,则会出现以下错误。

TypeError: expected request_binary as binary type, got <class 'mmap.mmap'>

对于小文件,我不能简单地传入data.read()甚至完全跳过mmap,但对于大文件,这会导致MemoryError

有没有办法包装或转换mmap对象,以便API可以将其用作bytes

1 个答案:

答案 0 :(得分:3)

docstring for the API you're using在右上角说:

  

请勿使用此功能上传大于150 MB的文件。而是使用files_upload_session_start创建上传会话。

假设您的计算机有超过150 MB的可用内存,mmap将无法帮助您。您需要使用他们推荐的API(支持一次发送一件的分块上传)。