在使用文件对象之前确定文件对象大小

时间:2010-10-18 12:58:48

标签: python filesize file-copying

我试图在使用BeautifulSoup解析和操作它之前确定python中下载文件的大小。 (我打算尽快更新到ElementTree,但是简单地使用它,它并没有解决我在这里构成的问题,据我所见)。

import urllib2, BeautifulSoup
query = 'http://myexample.file.com/file.xml'
f = urllib2.urlopen(query)
print len(f.read())
soup = BeautifulSoup.BeautifulStoneSoup(f.read())

这段代码因为read()文件len()第一次出现fcopy = f时自然会达到一个EOF,因此当我想用BeautifulSoup访问它时,文件对象就会变空。

我的初衷只是用fcopy = copy.copy(f)行来复制对象,但这让我学会了我只是引用了底层对象并且什么都没得。

然后我认为import urllib2, BeautifulSoup def get_bytes(file): return len(file.read()) query = 'http://myexample.file.com/file.xml' f = urllib2.urlopen(query) print(get_bytes(f)) soup = BeautifulSoup.BeautifulStoneSoup(f.read()) 会创建对象的真实副本,但显然不像读取f仍会导致fcopy成为空文件对象。

我甚至读过将对象作为参数传递给函数以便绕过它,并尝试了下面的代码

{{1}}

但我遇到了同样的问题。如何在不有效销毁文件的情况下确定此对象的文件大小?

1 个答案:

答案 0 :(得分:2)

将文件内容复制到变量中并使用它:

import urllib2, BeautifulSoup

query = 'http://myexample.file.com/file.xml'
f = urllib2.urlopen(query)
content = f.read()
print len(content)
soup = BeautifulSoup.BeautifulStoneSoup(content)