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?

Original source

Related problems