In Python, I'm writing to a text file with code like:
f.write(filename + type + size + modified)
And of course the output looks really ugly:
C:/Config/ControlSet/__db.006 file 56 KB 2012-Apr-30 10:00:46.467 AM
C:/Config/ControlSet dir 68881 KB 2012-Apr-30 10:00:46.396 AM
C:/Config/DataStore.avlocate file 0 KB 2012-Apr-30 09:57:42.440 AM
C:/Config/DataStoreLocate.bak file 0 KB 2012-Apr-30 09:57:42.470 AM
C:/Config/DeviceConnections/devconn.bak file 41 KB 2012-Apr-30 10:39:50.181 AM
C:/Config/DeviceConnections/devconn.cfg file 41 KB 2012-May-29 10:12:45.288 AM
But I want to align the entries so it looks like this:
C:/Config/ControlSet/__db.006 file 56 KB 2012-Apr-30 10:00:46.467 AM
C:/Config/ControlSet dir 68881 KB 2012-Apr-30 10:00:46.396 AM
C:/Config/DataStore.avlocate file 0 KB 2012-Apr-30 09:57:42.440 AM
C:/Config/DataStoreLocate.bak file 0 KB 2012-Apr-30 09:57:42.470 AM
C:/Config/DeviceConnections/devconn.bak file 41 KB 2012-Apr-30 10:39:50.181 AM
C:/Config/DeviceConnections/devconn.cfg file 41 KB 2012-May-29 10:12:45.288 AM
My issue is similar to this question except I don't know how long the filenames will be beforehand. How should I approach this?
I think what you're looking for is the str.ljust() method and maybe str.rjust() too.
As it says in the docs, the original string is returned if it's too long, so you will never truncate away any data, but you would have to find out the longest lengths ahead of time in order to get really perfect formatting. I would suggest just using a reasonably large number for the values unless it has to be perfect.
Something like...
would do the trick.
If you can get a list of all filenames first, then you could do something like:
If you can't get a list of all filenames first, then there's no way to make sure that everything will line up, because there's no way to know if you'll later get a file whose name is really long.
In a case like this, though, I would usually just assume that N columns is generally sufficient, for some N, in which case you can just do something like: