Search code examples
pythonpython-3.xpython-itertools

Continuously Update A File


Ultimately I need to make info from the Spotify API available to an app that will display "current song" info, including cue time.

So will need to be continuously polling the API, as well as updating the data source the App is polling.

I'm still trying to wrap my head around thinking of data in terms of streams as opposed to files.

So I came up with this little experiment for how a file can be continuously updated:

import itertools
for i in itertools.count(start=0, step=1):
    f = open('info.txt', 'w')
    f.write(str(i))
    f.close()

It even sort of works. I can open or cat info.txt and intermittently see:

  • nothing
  • a numeral from an increasing series

Why nothing sometimes?

Additionally confusing, inside the interactive python terminal a stream of slowly incrementing low numerals is output, beginning at 4:

4
4
4
4
etc...
5
5
5
5
etc...

Is using f.write an advisable approach to continuously updating a row of data that can be consumed as a file?


Solution

  • Try the following:

    import os
    import shutil
    import itertools
    for i in itertools.count(start=0, step=1):
        f = open('tmp', 'w')
        f.write(str(i))
        f.close()
        shutil.move('tmp', 'info.txt')
    

    Unlike the open-write-close sequence of operations, the file move is an atomic operation which avoids catching the info.txt file in an "unstable" state i.e. after the open and before the write operation.