のコメントで述べたように、pprint
とtextwrap
は出力を整列させるために使用することができます与えられた幅。それを考えると、使用する幅を決定するのは唯一の方法です。あなたは78または80を使用して、ウィンドウがそれほど大きいと仮定することができますが、ターミナルが小さければ不正なラップを意味し、ターミナルが大きければスペースを無駄にします。
あなたは、Python 3.3以上にしている場合、あなたはshutil.get_terminal_size
使用することができ、pprint
/textwrap
で使用するために実際の幅を確認するには:あなたは3を使用できない場合
import shutil
def get_terminal_columns():
return shutil.get_terminal_size().columns
を。3+、あなたはやや複雑な方法でサイズを決定するためにthe curses
moduleを使用することができます。これらの関数のいずれかを使用して
import curses
def get_terminal_columns():
try:
# Initialize curses for terminal and check dimensions
rows, cols = curses.initscr().getmaxyx()
finally:
# Unload curses to release control of terminal so it behaves normally
curses.endwin()
return cols
、あなたがして定義することができます。
from __future__ import print_function # Only needed on Py2
import textwrap
def print_autobreak(*args, sep=' '):
width = get_terminal_columns() # Check size once to avoid rechecks per "paragraph"
# Convert all args to strings, join with separator, then split on any newlines,
# preserving line endings, so each "paragraph" wrapped separately
for line in sep.join(map(str, args)).splitlines(True):
# Py3's print function makes it easy to print textwrap.wrap's result as one-liner
print(*textwrap.wrap(line, width), sep="\n")
をこれは自動的に単語の間に改行を行い、既存の「ハード」改行とスペースを保持し、オプションのセパレータを使用して複数の引数を使用できるようにすることで、部分的にはprint
の動作に一致します。印刷前に出力文字列を完全に認識する必要があります(オリジナルのprint
は1枚ずつ印刷でき、巨大な出力に対してはメモリ使用量を少し減らすことができます)が、適切なグローバルラッピングを実行する副作用です。
より完全な改行処理が必要な場合(改行なしで2つの印刷が行われる可能性がありますが、2番目の改行は最初の行の長さに相当します)、ステートフルなプリンタが必要です)または完全なcurses
の機能でより複雑なものを発明してください。私はそれを運動として残します。
https://docs.python.org/3/library/pprint.htmlまたはhttps://docs.python.org/3/library/textwrap.htmlを試しましたか? – jonrsharpe