2011-08-18 106 views
4

这里是例子: 我试图抓住一系列的XML页面,然后从它们中提取数据。Python:循环做同样的事情到一个项目n次,而不是一次n项目

它下载每个单独的页面,因为while循环被设计成可以执行,但tester()函数从它下载的第一个文件打印数据V次,尽管它每次循环后都要下载并清除文件。

这是杀了我我做错了什么?

def tester(): 
    with open('raw.txt') as myFile: 
     test = linecache.getline('raw.txt', 12) 
     print test 
     test = "" 
     myFile.close 

def grab_data(Year, rcvote): 
    link = "XXX/%s/roll%s.xml" % (Year, rc) 
    site = urllib2.urlopen(link) 
    localFile = open('raw.txt', 'w') 
    localFile.write(site.read(100000)) 
    localFile.close() 
    tester() 


while (V !=0): 
    rc = str(V) 
    if (len(rc) == 2): 
     rc = "0%s" % (rc) 
    elif (len(rc) == 1): 
     rc = "00%s" % (rc) 
    else: 
     rc = rc 
    grab_data(Year, rc) 
    V = V - 1 
+0

更多难题:如果直接使用'rcvote'为'grab_data',为什么要传递'rc'? –

+0

无关你的问题,试试这一行将'V'转换为零填充字符串:'rc ='%03d'%V' – Marty

回答

3

问题是linecache模块。它假定同名文件是相同的。

但是为什么要将数据写入文件只是为了再读一遍?

def tester(text): 
    line12 = text.splitlines()[11] 
    print line12 

def grab_data(year, rcvote): 
    link = "XXX/%s/roll%03d.xml" % (year, rcvote) 
    site = urllib2.urlopen(link) 
    tester(site.read(100000)) 

while v: 
    grab_data(year, rc) 
    v -= 1 
+0

我是python的新手,所以我并不总是做出最好的决定。什么会更好? – jimstandard1029

+0

我更新了一些代码。确切地说,是 –

+1

。同样''linecache.checkcache()'会重新检查缓存文件并将它们从缓存中删除,如果它们在磁盘上更改的话。但在这个例子中仍然使用'linecache'没有多大意义。为什么不直接从文件或网址中读取。 –

相关问题