Pythonでは、次のようなコードでテキストファイルに書き込みます。
f.write(filename + type + size + modified)
そしてもちろん、出力は本当に醜く見えます:
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
しかし、私はエントリを次のように揃えたいと思います:
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
私の問題は この質問 に似ていますが、ファイル名が事前にどれだけ長くなるかはわかりません。私はこれにどのように取り組むべきですか?
すべてのファイル名のリストを最初に取得できる場合は、次のようにすることができます。
max_width = max(len(filename) for filename in filenames)
for filename in filenames:
f.write(filename.ljust(max_width+1)+..whatever else..)
最初にすべてのファイル名のリストを取得できない場合、すべてが整列することを確認する方法はありません。名前が本当に長いファイルを後で取得するかどうかを知る方法がないためです。
ただし、このようなケースでは、通常、N列で一般に十分であると想定しています。
f.write('%-40s %6s %10s %2s\n' % (filename, type, size, modified))
あなたが探しているのは str.ljust() メソッドと多分 str.rjust() だと思います。
ドキュメントに記載されているように、元の文字列は長すぎる場合に返されるため、データを切り捨てることはありませんが、本当に完全なフォーマットを取得するには、事前に最長の長さを見つける必要があります。完全である必要がない限り、値にはかなり大きな数を使用することをお勧めします。
何かのようなもの...
f.write(
"{0} {1} {2} {3}".format(
filename.ljust(max_filename),
type.rjust(max_type),
size.rjust(max_size),
modified.rjust(max_modified)
)
)
トリックを行います。