Francesco Pietra wrote:
Hi;
Hi,
Let L be a data line
I would like to renumber, starting from 1, column 6 (i.e, 428 become
1, 429 becomes 2, etc for a very long list)
So you want to subtract 427 from each entry in L[22:26]
ATOM 3424 N LEU B 428 143.814 87.271 77.726 1.00115.20 2SG3426
...
ATOM 3432 N SER B 429 142.432 85.155 78.878 1.00134.86 2SG3434
...
Distinctive character is column 5, i.e., it must be set that only
lines containing "B" should be renumbered.
if L[21] ==
As you can see, the number of lines for a particular value in column 6
changes from situation to situation, and may even be different for the
same name in column 4. For example, LEU can have a different number of
lines depending on the position of this amino acid (leucine).
But from what you said earlier, this is not relevant.
I was unable to set non-proportional characters, sorry.
The display font depends on individual systems. Thunderbird uses fixed
pitch font, so table displays nicely for me.
Thanks for help
This is fairly simple. See the tutorial for explanations.
data = [
'ATOM 3424 N LEU B 428 143.814 87.271 77.726 1.00115.20
2SG3426',
'ATOM 3432 N SER B 429 142.432 85.155 78.878 1.00134.86
2SG3434'
]
for L in data:
if L[21] == 'B':
L = L[:22] + "%4d" % (int(L[22:26])-427) + L[26:]
print(L) #py3
# prints
ATOM 3424 N LEU B 1 143.814 87.271 77.726 1.00115.20
2SG3426
ATOM 3432 N SER B 2 142.432 85.155 78.878 1.00134.86
2SG3434
If you start with a disk file and want to end up with a new disk file...
replace the 'data =' statement above with
data = open('datafile','r')
follow it with
outp = open('newdata', 'w')
and replace the print statement with
outp.write(L)
Terry Jan Reedy
--
http://mail.python.org/mailman/listinfo/python-list