Pythonのcsvライターを使用して、固定幅、スペース区切り、最小限の引用符で囲まれたCSVファイルを書きたいと思います。出力の例:
item1 item2
"next item1" "next item2"
anotheritem1 anotheritem2
私が使用する場合
writer.writerow( ("{0:15s}".format(item1), "{0:15s}".format(item2)) )
...
次に、スペース区切り文字を使用すると、アイテムの書式設定の末尾のスペースが原因で、引用符またはエスケープ ( csv.QUOTE_* 定数に応じて) が追加されるため、書式設定が壊れます。
"item1 " "item2 "
"next item1 " "next item2 "
"anotheritem1 " "anotheritem2 "
もちろん、すべてを自分でフォーマットできます。
writer.writerow( ("{0:15s}{1:15s}".format(item1, item2)) )
しかし、csv ライターを使用する意味はあまりありません。また、アイテムにスペースが埋め込まれていて、引用/エスケープを使用する必要がある場合は、手動で整理する必要があります。言い換えれば、「QUOTE_MINIMAL」として機能するが、末尾のスペースも無視する(存在しない)「QUOTE_ABSOLUTELYMINIMAL」csv定数が必要なようです。
「QUOTE_ABSOLUTELYMINIMAL」の動作を実現する方法、または Python の CSV モジュールを使用して固定幅のスペース区切りの CSV 出力を取得する別の方法はありますか?
CSV ファイルに固定幅機能が必要な理由は、読みやすさです。そのため、読み取りと書き込みの両方で CSV として処理されますが、列構造により読みやすくなります。csv skipinitialspace オプションが余分なスペースを無視するため、読み取りは問題ありません。驚いたことに、書き込みが問題のようです...
編集:現在のcsvプラグインでは達成できないと結論付けています。これは組み込みオプションではなく、Python の csv ライターで区切り記号を引用またはエスケープせずに追加の区切り記号を記述する方法がないように思われるため、手動で実現する合理的な方法がわかりません。したがって、おそらく独自の csv ライターを作成する必要があります。