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 に答える