J'essaie d'ajouter un espacement pour aligner le texte entre deux chaînes de caractères sans utiliser "" pour le faire
Essayer d'obtenir le texte qui ressemble à ceci, avec la deuxième colonne alignée.
Location: 10-10-10-10 Revision: 1
District: Tower Date: May 16, 2012
User: LOD Time: 10:15
Actuellement, le code est comme ça, en utilisant simplement des espaces ...
"Location: " + Location + " Revision: " + Revision + '\n'
J'ai essayé de travailler avec string.rjust & srting.ljust mais en vain.
Suggestions?
Vous devriez pouvoir utiliser la méthode de formatage:
"Location: {0:20} Revision {1}".format(Location,Revision)
Vous devrez déterminer la longueur du format pour chaque ligne en fonction de la longueur de l'étiquette. La ligne Utilisateur aura besoin d’une largeur de format plus large que celle des lignes Location ou District.
Essayez %*s
et %-*s
et préfixez chaque chaîne par la largeur de la colonne:
>>> print "Location: %-*s Revision: %s" % (20,"10-10-10-10","1")
Location: 10-10-10-10 Revision: 1
>>> print "District: %-*s Date: %s" % (20,"Tower","May 16, 2012")
District: Tower Date: May 16, 2012
Vous pouvez utiliser expandtabs
pour spécifier le tabstop, comme ceci:
>>> print ('Location:'+'10-10-10-10'+'\t'+ 'Revision: 1').expandtabs(30)
>>> print ('District: Tower'+'\t'+ 'Date: May 16, 2012').expandtabs(30)
#Output:
Location:10-10-10-10 Revision: 1
District: Tower Date: May 16, 2012
La réponse de la méthode de formatage @ IronMensan est la voie à suivre. Mais dans l’intérêt de répondre à votre question à propos de ljust:
>>> def printit():
... print 'Location: 10-10-10-10'.ljust(40) + 'Revision: 1'
... print 'District: Tower'.ljust(40) + 'Date: May 16, 2012'
... print 'User: LOD'.ljust(40) + 'Time: 10:15'
...
>>> printit()
Location: 10-10-10-10 Revision: 1
District: Tower Date: May 16, 2012
User: LOD Time: 10:15
Modifier pour noter que cette méthode ne vous oblige pas à savoir combien de temps vos chaînes sont. .format () peut aussi, mais je ne le connais pas assez pour le dire.
>>> uname='LOD'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: LOD Time: 10:15'
>>> uname='Tiddlywinks'
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15'
'User: Tiddlywinks Time: 10:15'
Ressusciter un autre sujet, mais cela peut être utile pour certains.
En vous inspirant un peu de https://pyformat.info , vous pouvez créer une méthode pour obtenir une impression de style Table of Content [TOC].
# Define parameters
Location = '10-10-10-10'
Revision = 1
District = 'Tower'
MyDate = 'May 16, 2012'
MyUser = 'LOD'
MyTime = '10:15'
# This is just one way to arrange the data
data = [
['Location: '+Location, 'Revision:'+str(Revision)],
['District: '+District, 'Date: '+MyDate],
['User: '+MyUser,'Time: '+MyTime]
]
# The 'Table of Content' [TOC] style print function
def print_table_line(key,val,space_char,val_loc):
# key: This would be the TOC item equivalent
# val: This would be the TOC page number equivalent
# space_char: This is the spacing character between key and val (often a dot for a TOC), must be >= 5
# val_loc: This is the location in the string where the first character of val would be located
val_loc = max(5,val_loc)
if (val_loc <= len(key)):
# if val_loc is within the space of key, truncate key and
cut_str = '{:.'+str(val_loc-4)+'}'
key = cut_str.format(key)+'...'+space_char
space_str = '{:'+space_char+'>'+str(val_loc-len(key)+len(str(val)))+'}'
print(key+space_str.format(str(val)))
# Examples
for d in data:
print_table_line(d[0],d[1],' ',30)
print('\n')
for d in data:
print_table_line(d[0],d[1],'_',25)
print('\n')
for d in data:
print_table_line(d[0],d[1],' ',20)
Le résultat obtenu est le suivant:
Location: 10-10-10-10 Revision:1
District: Tower Date: May 16, 2012
User: LOD Time: 10:15
Location: 10-10-10-10____Revision:1
District: Tower__________Date: May 16, 2012
User: LOD________________Time: 10:15
Location: 10-10-... Revision:1
District: Tower Date: May 16, 2012
User: LOD Time: 10:15