首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从cStringIO写入文件

从cStringIO写入文件
EN

Stack Overflow用户
提问于 2014-04-29 10:32:01
回答 1查看 216关注 0票数 0

我正在尝试将cStringIO缓冲区写入磁盘。该缓冲器可以表示pdf、图像或html文件。

我采取的方法似乎有点不可靠,所以我也愿意选择其他方法作为解决方案。

代码语言:javascript
复制
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()之后,磁盘上的文件始终是零字节。

EN

回答 1

Stack Overflow用户

发布于 2014-04-29 11:22:22

哇哦!

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

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23354456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档