est-il possible d'imprimer ce qui suit,
print user + ":\t\t" + message
de sorte que les longs messages qui sont plus larges que la longueur du terminal s'enroulent toujours (commence à la même position)? donc par exemple cela
Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT
devraient devenir
Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT
RIGHTRIGHTRIGHT
Je pense que ce que vous cherchez ici est le module textwrap
:
user = "Username"
prefix = user + ": "
preferredWidth = 70
wrapper = textwrap.TextWrapper(initial_indent=prefix, width=preferredWidth,
subsequent_indent=' '*len(prefix))
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)
Cela imprime:
Username: LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT
Si vous voulez réellement utiliser des tabulations dans le retrait, c'est un peu plus compliqué, car vous devez d'abord développer les tabulations par initial_indent
pour trouver le bon subsequent_indent
utiliser. Et, parce que votre préfixe se termine se termine avec deux onglets, c'est encore plus compliqué. Voici le plus simple que j'ai trouvé:
user = "Username"
prefix = user + ":\t\t"
expanded_indent = textwrap.fill(prefix+'$', replace_whitespace=False)[:-1]
subsequent_indent = ' ' * len(expanded_indent)
wrapper = textwrap.TextWrapper(initial_indent=prefix,
subsequent_indent=subsequent_indent)
message = "LEFTLEFTLEFTLEFTLEFTLEFTLEFT RIGHTRIGHTRIGHT " * 3
print wrapper.fill(message)
Si vous faites cela à plusieurs reprises, vous voudrez probablement envelopper ce gâchis dans une fonction.
Vous pouvez utiliser str.ljust()
pour remplir chaque ligne à la largeur requise comme suit:
line_width = 20
print "Username:".ljust(line_width) + "LEFT"*6
print "".ljust(line_width) + "RIGHT"*3
L'argument que vous passez à ljust
est la longueur que vous souhaitez que la chaîne soit, tant que cela est cohérent, les lignes doivent s'aligner correctement.
Alternativement, vous pouvez utiliser la multiplication de chaînes sur les lignes où vous avez juste besoin du remplissage comme ceci:
print " "*line_width + "RIGHT"*3
Cela aura exactement la même sortie que la dernière ligne du code ci-dessus.
Je suggère d'utiliser format pour mettre en retrait à gauche, par exemple:
print 'Username: {:>40}'.format('Foo')
print ' {:>40}'.format('FooBar')
Se traduira par:
Username: Foo
FooBar
Aussi,
print '{:<30}{:<40}'.format('UserName:','Foo')
print '{:<30}{:<40}'.format('User:','FooBar')
print '{:<30}{:<40}'.format('','FooBar42')
résultera en:
UserName: Foo
User: FooBar
FooBar42
Etc...