Re: reposition a column

2009-11-26 Thread MRAB

Francesco Pietra wrote:

Hi:

script now used:

# Sample line
# Slice indexes cut to the left of the corresponding item index
#   1 2 3 4 5 6
# 012345678901234567890123456789012345678901234567890123456789012345 ...
# ATOM  1  W W 1   0.690  35.960  33.300  1.00  0.00

data = open('out.2.5.2.5.2.0.pdb', 'r')
outp = open('rect.out.2.5.2.5.2.0.pdb', 'w')

for L in data:
  if L[19] == 'W':
L = L[ : 17] + L[19] + L[18] + ' ' + L[20 : ]
  outp.write(L)

france...@tya64:~/tmp$ python MRAB.py
Traceback (most recent call last):
 File MRAB.py, line 11, in module
   if L[19] == 'W':
IndexError: string index out of range
france...@tya64:~/tmp$

Unfortunately, in my hands gmail plaint text is like that. Actually,
the second 'W' is 19.


The code is assuming that the lines are all at least 19 characters long;
if a line is shorter then there's no position 19!

Try checking the line length too:

   if len(L) = 19 and L[19] == 'W':

Alternatively:

   if L[19 : 20] == 'W':

(If the line is too short then L[19 : 20] will return ''.)
--
http://mail.python.org/mailman/listinfo/python-list


Re: reposition a column

2009-11-25 Thread MRAB

Francesco Pietra wrote:

Hi:

In a pdb file made of lines ATOM .. (see attachment as I was unable
to obtain plain text with gmail) I would like to reposition the second
W from column 19 to 17 ( (Python numbering; in pdb numbering it
would be 20 18). I started with bold slices, then I was unable to
complete the script. Much obliged for help.


I'm assuming that you want to put a space where the 'W' was.

L = L[ : 17] + L[19] + L[18] + ' ' + L[20 : ]

--
http://mail.python.org/mailman/listinfo/python-list


Re: reposition a column

2009-11-25 Thread Vlastimil Brom
2009/11/25 Francesco Pietra francesco.pie...@accademialucchese.it:
 Hi:

 In a pdb file made of lines ATOM .. (see attachment as I was unable
 to obtain plain text with gmail) I would like to reposition the second
 W from column 19 to 17 ( (Python numbering; in pdb numbering it
 would be 20 18). I started with bold slices, then I was unable to
 complete the script. Much obliged for help.

 francesco pietra

 --
 http://mail.python.org/mailman/listinfo/python-list


Hi,
using only string slices, you can probably do something like the
following (if I underestand the specification correctly, i.e. to swap
the two columns under the given condition).
An alternative is to swap the indices directly using list.
Also a regular expression replace with re.sub might be viable
(probably the shortest one)...

hth,
  vbr

##

scale =   1 2 3 4 5 6
012345678901234567890123456789012345678901234567890123456789012345
data_line = ATOM  1  W W 1   0.690  35.960  33.300  1.00  0.00

if data_line [19] == 'W':
output_line = data_line [0:17]+data_line [19]+data_line
[18]+data_line [17]+data_line [20:]
# alternatively
ch_19, ch_17 = data_line [19], data_line [17]
data_lst = list(data_line)
data_lst[17] = ch_19
data_lst[19] = ch_17
output_line_2 = .join(data_lst)
print output_line_2 == output_line

else:
output_line = data_line

print scale
print data_line
print scale
print output_line
print = * 66
-- 
http://mail.python.org/mailman/listinfo/python-list