On 01/-10/-28163 02:59 PM, tee chwee liong wrote:
hi,
i'm using Python 2.5 and Win XP.
i want to extract the last column of the attached text file and group 128
characters to each row. want the result to look like:
Row1=XXXXX.............................1XXX (total of 128 char)
Row2=11XX...............................X1XX (total of 128 char)
###code
from __future__ import with_statement
def main():
new_rows = {}
values = []
with open('test2.txt') as f:
for line in f:
values.append(line.rstrip('\n')[-1])
x = [] # making a new list here, not only
x += values # a new reference to the same object
for count in xrange(0,len(values),128):
temp_values1 =
(x.pop(9))+(x.pop(8))+(x.pop(7))+(x.pop(6))+(x.pop(5))+(x.pop(4))+(x.pop(3))+(x.pop(2))+(x.pop(1))+(x.pop(0))
temp_values2 =
(x.pop(19))+(x.pop(18))+(x.pop(17))+(x.pop(16))+(x.pop(15))+(x.pop(14))+(x.pop(13))+(x.pop(12))+(x.pop(11))+(x.pop(10))
temp_values3 =
(x.pop(29))+(x.pop(28))+(x.pop(27))+(x.pop(26))+(x.pop(25))+(x.pop(24))+(x.pop(23))+(x.pop(22))+(x.pop(21))+(x.pop(20))
temp_values4 =
(x.pop(39))+(x.pop(38))+(x.pop(37))+(x.pop(36))+(x.pop(35))+(x.pop(34))+(x.pop(33))+(x.pop(32))+(x.pop(31))+(x.pop(30))
temp_values5 =
(x.pop(49))+(x.pop(48))+(x.pop(47))+(x.pop(46))+(x.pop(45))+(x.pop(44))+(x.pop(43))+(x.pop(42))+(x.pop(41))+(x.pop(40))
temp_values6 =
(x.pop(59))+(x.pop(58))+(x.pop(57))+(x.pop(56))+(x.pop(55))+(x.pop(54))+(x.pop(53))+(x.pop(52))+(x.pop(51))+(x.pop(50))
temp_values7 =
(x.pop(69))+(x.pop(68))+(x.pop(67))+(x.pop(66))+(x.pop(65))+(x.pop(64))+(x.pop(63))+(x.pop(62))+(x.pop(61))+(x.pop(60))
temp_values8 =
(x.pop(79))+(x.pop(78))+(x.pop(77))+(x.pop(76))+(x.pop(75))+(x.pop(74))+(x.pop(73))+(x.pop(72))+(x.pop(71))+(x.pop(70))
temp_values9 =
(x.pop(89))+(x.pop(88))+(x.pop(87))+(x.pop(86))+(x.pop(85))+(x.pop(84))+(x.pop(83))+(x.pop(82))+(x.pop(81))+(x.pop(80))
temp_values10 =
(x.pop(99))+(x.pop(98))+(x.pop(97))+(x.pop(96))+(x.pop(95))+(x.pop(94))+(x.pop(93))+(x.pop(92))+(x.pop(91))+(x.pop(90))
temp_values11 =
(x.pop(109))+(x.pop(108))+(x.pop(107))+(x.pop(106))+(x.pop(105))+(x.pop(104))+(x.pop(103))+(x.pop(102))+(x.pop(101))+(x.pop(100))
temp_values12 =
(x.pop(119))+(x.pop(118))+(x.pop(117))+(x.pop(116))+(x.pop(115))+(x.pop(114))+(x.pop(113))+(x.pop(112))+(x.pop(111))+(x.pop(110))
temp_values13 =
(x.pop(127))+(x.pop(126))+(x.pop(125))+(x.pop(124))+(x.pop(123))+(x.pop(122))+(x.pop(121))+(x.pop(120))
temp_values=temp_values1+temp_values2+temp_values3+temp_values4+temp_values5+temp_values6+temp_values7+temp_values8+temp_values9+temp_values10+temp_values11+temp_values12+temp_values13
new_rows['ROW'+str(count+1)] = temp_values
print new_rows
if __name__ == '__main__':
main()
######
but getting error:
Traceback (most recent call last):
File "C:/Python25/myscript/group/group5.py", line 43, in<module>
main()
File "C:/Python25/myscript/group/group5.py", line 26, in main
temp_values8 =
(x.pop(79))+(x.pop(78))+(x.pop(77))+(x.pop(76))+(x.pop(75))+(x.pop(74))+(x.pop(73))+(x.pop(72))+(x.pop(71))+(x.pop(70))
IndexError: pop index out of range
pls advise. tq
How about some clues as to what you're trying to accomplish? This code
is surprisingly verbose, and probably totally wrong. Anyway, each time
you pop an item from the list, all the following ones change their
index. So presumably there weren't still 79 items in the list by the
time you had removed and shuffled a bunch of them. You don't indicate
how many times it went around the outer loop, but in any case, there
won't be enough values the last time around.
There are also a few surprises in the code.
x += isn't the simplest way to build a new list from the old. Use the
following:
x = values[:]
You have lots of redundant parentheses on all those similar lines.
Are you really trying to process only the last character of each line?
Are you assuming the file has an exact multiple of 128 lines?
DaveA
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor