Renumbering

bearophileHUGS at lycos.com bearophileHUGS at lycos.com
Tue Sep 2 17:36:16 EDT 2008


Francesco Pietra, few notes:
- In Python and C item numbering generally starts from 0, so you talk
about column 0, 1, etc.
- You can also use the Italian Python newsgroup if know Italian.
- The number of lines with a particular number doesn't seem important
to solve your problem.
- You don't need to try to set non-proportional characters on usenet.

This is a first try at a solution, you can tell us if it's correct:

data = """\
ATOM   3424  N   LEU B 428     143.814  87.271  77.726
1.00115.20       2SG3426
ATOM   3425  CA  LEU B 428     142.918  87.524  78.875
1.00115.20       2SG3427
ATOM   3426  CB  LEU B 428     141.559  88.057  78.392
1.00115.20       2SG3428
ATOM   3427  CG  LEU B 428     140.577  88.341  79.544
1.00115.20       2SG3429
ATOM   3428  CD1 LEU B 428     141.102  89.464  80.454
1.00115.20       2SG3430
ATOM   3429  CD2 LEU B 428     139.159  88.615  79.017
1.00115.20       2SG3431
ATOM   3430  C   LEU B 428     142.680  86.253  79.615
1.00115.20       2SG3432
ATOM   3431  O   LEU B 428     142.725  86.226  80.842
1.00115.20       2SG3433
ATOM   3432  N   SER B 429     142.432  85.155  78.878
1.00134.86       2SG3434
ATOM   3433  CA  SER B 429     142.175  83.908  79.534
1.00134.86       2SG3435
ATOM   3434  CB  SER B 429     141.666  82.805  78.590
1.00134.86       2SG3436
ATOM   3435  OG  SER B 429     140.392  83.155  78.069
1.00134.86       2SG3437
ATOM   3436  C   SER B 429     143.451  83.432  80.141
1.00134.86       2SG3438
ATOM   3437  O   SER B 429     144.543  83.756  79.676
1.00134.86       2SG3439"""

lines = (line.split() for line in data.splitlines())
for parts in lines:
    if parts[4] == "B":
        parts[5] = str( int(parts[5]) - 427)
    parts[2] = parts[2].ljust(4)
    print "  ".join(parts)

It prints:

ATOM  3424  N     LEU  B  1  143.814  87.271  77.726  1.00115.20
2SG3426
ATOM  3425  CA    LEU  B  1  142.918  87.524  78.875  1.00115.20
2SG3427
ATOM  3426  CB    LEU  B  1  141.559  88.057  78.392  1.00115.20
2SG3428
ATOM  3427  CG    LEU  B  1  140.577  88.341  79.544  1.00115.20
2SG3429
ATOM  3428  CD1   LEU  B  1  141.102  89.464  80.454  1.00115.20
2SG3430
ATOM  3429  CD2   LEU  B  1  139.159  88.615  79.017  1.00115.20
2SG3431
ATOM  3430  C     LEU  B  1  142.680  86.253  79.615  1.00115.20
2SG3432
ATOM  3431  O     LEU  B  1  142.725  86.226  80.842  1.00115.20
2SG3433
ATOM  3432  N     SER  B  2  142.432  85.155  78.878  1.00134.86
2SG3434
ATOM  3433  CA    SER  B  2  142.175  83.908  79.534  1.00134.86
2SG3435
ATOM  3434  CB    SER  B  2  141.666  82.805  78.590  1.00134.86
2SG3436
ATOM  3435  OG    SER  B  2  140.392  83.155  78.069  1.00134.86
2SG3437
ATOM  3436  C     SER  B  2  143.451  83.432  80.141  1.00134.86
2SG3438
ATOM  3437  O     SER  B  2  144.543  83.756  79.676  1.00134.86
2SG3439

Your data is probably in a file, so you have to change the first line
of the code:

lines = (line.split() for line in open("namefile.txt"))

If your output file must to hard-coded columns (and generally those
files don't need such property) then you have to make that code of
mine more complex...

Bye,
bearophile



More information about the Python-list mailing list