我试图在使用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}}
但我遇到了同样的问题。如何在不有效销毁文件的情况下确定此对象的文件大小?
答案 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)