Python- Adding a specified width to strings

2019-02-23 08:05发布

问题:

I want to write a string to a file but I want to have a specified length, for example, in the text file, I want to write "Atom", I want it to have a specified length from column 1 - 6, and the next phrase/word, from column 7-11, next from 13-16, and etc... I would want to write to a text file say, random_text.txt, please help.

Thanks!

Basically, why I need it:

Column 1-6 Record Name
Column 7-11 Serial Number
Column 13-16 ATOM name/Type
Column 17 Alternate Location Indicator
Column 18-20 Residue Name
Column 22 Chainidentifier 
Column 23-26 Residue sequence number
Column 27 Code for insertion fo residues
Column 31-38 X-value
Column 39-46 Y-value
Column 47-54 Z-Value
Column 55-60 Occupency
Column 61-66 Temperature (Default 0.0)
Column 73-76 Segment identifier
Column 77-78 Element Symbol
Column 79-80 Charge on atom

回答1:

In Python2.6 or later, you could use the str.format method:

with open('random_text.txt', 'w') as f:
    f.write('{0:6}{1:6}{2:4}'.format('Atom','word','next'))

yields a file random_text.txt with contents

Atom  word  next

The number following the colon indicate the width. For example, {0:6} formats the 0-th argument, 'Atom', into a string with a width of 6. The string could be "right-justified" by using the format {0:>6}, and there are other options as well.



回答2:

string = "atom"
width = 6
field = "{0:<{1}}".format(string[:width], width)

This will truncate string to width if necessary, since you can't actually specify the max width in format string, just the minimum width that the field will be padded to.



回答3:

Use str.format, define field widths (:<width>) and expand your data (*<list>).

>>> columns = ['aaaa', 'bbbbbb', 'ccc']
>>> print '{:4}{:6}{:3}'.format(*columns)

Additionally, you can abuse the precision .8 to trim a string field. The first 8 sets the minimum field width.

>>> print '{:8.8}'.format('Too long for this field')
Too long