2010-10-18 44 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