从cStringIO写入文件

时间:2014-04-29 02:32:01

标签: python python-2.7 cstringio

我正在尝试将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()后,磁盘上的文件始终为零字节。

1 个答案:

答案 0 :(得分:0)

哎呦!

我在尝试读取之前忘了重置流位置;所以它从最后读取,因此零字节。将光标移动到开头可以解决问题。

def copyfile(self, destfilepath):
    if self.datastream.tell() == 0:
        raise Exception("Exception: Attempt to copy empty buffer.")
    self.__datastream__.seek(0)  # <-- RESET POSITION TO BEGINNING
    with open(destfilepath, 'wb') as fp:
        shutil.copyfileobj(self.datastream, fp)
    self.__datastream__.close()