我对python相对较新,并尝试下载推文并将其保存到不同的文本文件中。我希望文件名是动态的,因此尝试根据我的要求修改代码。下面是我要修改的代码: -
class StdOutListener(StreamListener):
def on_data(self, data):
i=1
try:
if os.path.isfile('filename'+str(i)+'.txt'):
if os.stat('filename'+str(i)+'.txt').st_size > 5000000:
i=i+1
# print data
savefile=open('filename'+str(i)+'.txt','a')
savefile.write(data)
savefile.write('\n')
savefile.close()
return True
else:
savefile=open('filename'+str(i)+'.txt','a')
savefile.write(data)
savefile.write('\n')
savefile.close()
return True
else:
savefile=open('filename'+str(i)+'.txt','a')
savefile.write(data)
savefile.write('\n')
savefile.close()
except BaseException, e:
print 'failed_ondata,',str(e)
time.sleep(5)
def on_error(self, status):
print status
上面的代码中有些东西已关闭,因为它似乎不起作用。我还在学习,这可能是最明显的事情,但如果有人能帮助我完成上面的代码,我真的很感激。
答案 0 :(得分:0)
每次存在文件时递增i的循环不存在:您的机制仅适用于索引1的文件,它会创建索引为2的文件,然后停在那里。
修复:我添加了一个循环,一旦找到“免费”文件名就会中断。检查更好的方法来获取文件大小和代码更紧凑。经过测试并按设计工作:创建文件,每次太大时都会增加数字。
这是我的建议:
import os
class StdOutListener(StreamListener):
def get_filename(self,i):
return 'filename'+str(i)+'.txt'
def on_data(self, data):
i=1
try:
# compute first free file
while True:
f = self.get_filename(i)
if os.path.isfile(f):
if os.path.getsize(f) > 5000000:
i+=1 # next file index
else:
break # file exists but size small enough
else:
break # ok file does not exist
savefile=open(self.get_filename(i),'a')
savefile.write(data)
savefile.write('\n')
savefile.close()
return True # done!
except BaseException as e:
print('failed_ondata,',str(e))
time.sleep(5)
return False
def on_error(self, status):
print(status)