在类/函数中放置Python计数器

时间:2017-06-08 11:35:55

标签: python

我有以下代码。我想写40个带编号的输出文件(outfile),每个文件有100行。 while循环应该检查计数器何时达到100.但我的counter = counter + 1不能完成这项工作。 counter停留在1

class MyStreamListener(tweepy.StreamListener):
    def on_data(self, data):
        for i in range(40): # create max 40 outfiles
            outfile = (projname + "_" + str(i+1) + "_output.json")
            counter = 0
            while counter <= 100:
                try:
                    with open(outfile, 'a') as f:
                        f.write(data)
                        counter = counter + 1
                        print("\rAppending tweet " + str(counter) + " to " + str(outfile), end="")
                        return True
                except BaseException as e:
                    print("Error on_data: " % str(e))
                    return True
            else:
                break

1 个答案:

答案 0 :(得分:2)

我冒昧地重新编写了你的​​代码。

class MyStreamListener(tweepy.StreamListener):
    def on_data(self, data):
        for i in range(40):  # create max 40 outfiles
            outfile = (projname + "_" + str(i+1) + "_output.json")
            with open(outfile, 'a') as f:
                for counter in range(100):
                    f.write(data)
                    print("\rAppending tweet " + str(counter) + " to " + str(outfile), end="")
        return True

正如您可能已经注意到,现在有一些事情以不同的方式完成。

  1. 如果您知道执行循环需要多少次,则无需while
  2. 每次想要写一行时打开和关闭文件都非常浪费,所以每个文件都要这样做一次
  3. 我认为你的try阻止没有意义。应该尝试什么因为它可能会失败?
  4. 为什么else在最后?
  5. 我有可能会错过解释您的一些代码并删除应该存在的功能。如果是这种情况或您有任何疑问,请告诉我。

    注意:请注意,.write()print()不同,并且不会自动添加换行符。因此,除非data包含换行符,否则您的脚本会将所有内容写入一行。

    我最后一件事。 data在每次迭代中都不会更改。你在每个文件中写了100次相同的东西。这是理想的行为吗?