我正在尝试将 cStringIO 缓冲区写入磁盘。缓冲区可以表示 pdf、图像或 html 文件。
我采用的方法似乎有点不稳定,所以我也愿意接受替代方法作为解决方案。
def copyfile(self, destfilepath):
if self.datastream.tell() == 0:
raise Exception("Exception: Attempt to copy empty buffer.")
with open(destfilepath, 'wb') as fp:
shutil.copyfileobj(self.datastream, fp)
self.__datastream__.close()
@property
def datastream(self):
return self.__datastream__
#... inside func that sets __datastream__
while True:
buffer = response.read(block_sz)
self.__datastream__.write(buffer)
if not buffer:
break
# ... etc ..
test = Downloader()
ok = test.getfile(test_url)
if ok:
test.copyfile(save_path)
我采用这种方法是因为在我知道我已成功读取整个文件并且它是我感兴趣的类型之前,我不想开始将数据写入磁盘。
调用 copyfile() 后,磁盘上的文件始终为零字节。