Francesco Pietra wrote:
hi:
with script
data = open('134-176_rectified_edited.pdb', 'r')
outp = open('134-176_renumbered.pdb', 'w')
for L in data:
if L[3] == 'M':
L = L[:24] + "%4d" % (int(L[24-28])+133) + L[28:]
outp.write(L)
i wanted to modify lines of the type:
ATOM 1 HH31 ACE 1 1.573 1.961 0.769 1.00 0.00 H
to add 133 to column 25, getting 134 there, and so on for next lines 2
-> 135, 3 -> 136, etc.
A side note in addition to solution given: when writing code like this,
to operate on column-oriented date, which I have done much of, I find it
helpful to include in the code something like
# Sample line
# 1 2 3 4 5 6
# 012345678901234567890123456789012345678901234567890123456789012345 ...
# ATOM 1 HH31 ACE 1 1.573 1.961 0.769 1.00 0.00
Having done so...
Since slice indexes cut to the left of the corrresponding item index, I
suspect you actually want
L = L[:25] + "%4d" % (int(L[25:29])+133) + L[29:]
if the number is currently left-justified in its field (but note that
%4d will *right*-justify the new number), or
L = L[:22] + "%4d" % (int(L[22:26])+133) + L[26:]
if the number is currently right-justified.
If the data file is too big to verify correct formatting by eye, I also
typically did preliminary checks first. For instance, is every line
exact the right length. In this case, you better by sure that there are
at most 9866 records, so you do not over-flow your four-char field.
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list