2010-10-18 45 views
0

我试图确定一个下载的文件在Python中的大小,然后用BeautifulSoup解析和处理它。 (我打算很快更新到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(),就自然达到一个EOF等文件对象是然后我想与BeautifulSoup访问它的时间空。

我的初步想法是简单地复制一个fcopy = f行的对象,但这导致我学习我只是引用底层对象,并没有得到任何东西。

然后我认为fcopy = copy.copy(f)会创建对象的真实副本,但显然不是读取f仍然导致fcopy是一个空文件对象。

我甚至读到传递对象作为函数的参数,以获得这一轮,并试图将以下代码

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()) 

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

回答

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) 
+0

卫生署!所以弗利皮明显!谢谢 :) – fearoffours 2010-10-18 13:13:52