Writing nicely formatted text in Python
file, python, text
Solution
If you can get a list of all filenames first, then you could do something like:
max_width = max(len(filename) for filename in filenames)
for filename in filenames:
f.write(filename.ljust(max_width+1)+..whatever else..)
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:
f.write('%-40s %6s %10s %2s\n' % (filename, type, size, modified))
Problem
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?