使用 Python 将推文保存到不同的文件
Saving tweets to different files using Python
我对 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
上面的代码有问题,因为它似乎不起作用。我仍在学习,这可能是最明显的事情,但如果有人能帮助我处理上面的代码,我将不胜感激。
每次文件存在时递增 i 的循环不存在:你的机制只适用于索引 1 的文件,它创建一个索引 2 的文件,然后在那里停止。
修复:我添加了一个循环,一旦找到 "free" 文件名就会中断。检查获取文件大小的更好方法,并且代码更加紧凑。经过测试并按设计工作:创建文件,每次文件太大时递增数字。
这是我的建议:
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)
我对 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
上面的代码有问题,因为它似乎不起作用。我仍在学习,这可能是最明显的事情,但如果有人能帮助我处理上面的代码,我将不胜感激。
每次文件存在时递增 i 的循环不存在:你的机制只适用于索引 1 的文件,它创建一个索引 2 的文件,然后在那里停止。
修复:我添加了一个循环,一旦找到 "free" 文件名就会中断。检查获取文件大小的更好方法,并且代码更加紧凑。经过测试并按设计工作:创建文件,每次文件太大时递增数字。
这是我的建议:
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)