使用Python将推文保存到不同的文件

时间:2016-09-02 20:44:24

标签: python python-2.7 twitter tweepy

我对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

上面的代码中有些东西已关闭,因为它似乎不起作用。我还在学习,这可能是最明显的事情,但如果有人能帮助我完成上面的代码,我真的很感激。

1 个答案:

答案 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)