Python - добавление указанной ширины к строкам - PullRequest
4 голосов
/ 10 декабря 2011

Я хочу записать строку в файл, но я хочу иметь указанную длину, например, в текстовом файле, я хочу написать «Атом», я хочу, чтобы он имел указанную длину из столбца 1 - 6и следующую фразу / слово из столбца 7-11, затем из 13-16 и т. д. Я хотел бы написать в текстовый файл скажем random_text.txt, пожалуйста, помогите.

Спасибо!

В принципе, зачем мне это нужно:

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

Ответы [ 3 ]

8 голосов
/ 10 декабря 2011

В Python2.6 или новее вы можете использовать метод str.format :

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

возвращает файл random_text.txt с содержимым

Atom  word  next

Число после двоеточия указывает ширину. Например, {0:6} форматирует 0-й аргумент 'Atom' в строку шириной 6. Строка может быть "выровнена по правому краю" с использованием формата {0:>6}, и есть other варианты, а также .

4 голосов
/ 11 декабря 2011
string = "atom"
width = 6
field = "{0:<{1}}".format(string[:width], width)

Это обрезает string до width при необходимости, поскольку вы не можете указать максимальную ширину в строке формата, только минимальную ширину, к которой будет добавлено поле.

2 голосов
/ 06 сентября 2016

Используйте str.format , определите ширину поля (:<width>) и расширьте свои данные (*<list>).

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

Кроме того, вы можете злоупотреблять точностью .8 обрезать строковое поле.Первые 8 устанавливают минимальную ширину поля.

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