0

我试图在使用 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(),它自然会到达 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())

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

4

1 回答 1

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)
于 2010-10-18T13:01:27.807 回答