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
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.
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.
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