2016-05-09 3 views
2

Мой Python кодКак извлечь столбцы из списка Python?

import operator 

with open('index.txt') as f: 
    lines = f.read().splitlines() 

print type(lines) 
print len(lines) 

l2=lines[1::3] 
print len(l2) 
print l2[0] 

list1 = [0,2] 
my_items = operator.itemgetter(*list1) 
new_list = [ my_items(x) for x in l2 ] 

with open('newindex1.txt','w') as thefile: 
    for item in l2: 
     thefile.write("%s\n" % item) 

Пара линий от index.txt

0 0 0 
0 1 0 
0 2 0 
1 0 0 
1 1 0 
1 2 0 
2 0 0 
2 1 0 
2 2 0 
3 0 0 

Пара линий от newindex1.txt

0 1 0 
1 1 0 
2 1 0 
3 1 0 
4 1 0 
5 1 0 
6 1 0 
7 1 0 
8 1 0 
9 1 0 

Я хотел, чтобы прочитать файл в виде списка, а затем выберите каждый третий и затем, наконец, выберите первый и третий столбцы из этого списка. Кажется, я не понимаю, как оператор w орки.

Если я пытаюсь с решением Back2Basics импорта NumPy как нп

MyArray = np.fromfile ('index.txt', DTYPE = INT, Сентябрь =»«) AnotherArray = MyArray [:: 3] [ 0,2]

Я получил

File "a12.py", line 4, in <module> 
    anotherarray = myarray[::3][0,2] 
IndexError: too many indices 
+0

Что означает первый в третьей колонке? Все элементы в вашей третьей колонке в index.txt равны нулю. – cmashinho

+0

@cmashinho Первый и третий. Нет, они не все равны нулю, это всего лишь 10 строк. –

+0

Что вы хотите от первого текстового файла? –

ответ

2

Вам не нужно читать все данные в памяти на всех, вы можете использовать itertools.islice для разбора строк, которые вы хотите и csv lib для чтения и записи данных:

from operator import itemgetter 
from itertools import islice 
import csv 

with open("in.txt") as f, open('newindex1.txt','w') as out: 
    r = csv.reader(f, delimiter=" ") 
    wr = csv.writer(out, delimiter=" ") 
    for row in iter(lambda: list(islice(r, 0, 3, 3)), []): 
     wr.writerow(map(itemgetter(0, 2), row)[0]) 
1

Я настоятельно рекомендую использовать NumPy для этого. Причина в том, что это все числовые данные, которые так хорошо вписываются в память. Код выглядит так.

import numpy as np 
myarray = np.fromfile('index.txt', dtype=int, sep=' ') 
anotherarray = myarray[::3,::2] 

, а затем вы хотите записать файл

anotherarray.tofile('newfile.txt', sep=" ") 

То, как массив нарезка линия [::3,::2] читает «Берите каждые 3 строки, начиная с 0, и взять любой другой столбец, начиная с 0»

1

Думаю, что вам нужно что-то такое?

lines = [] 

with open('index.txt', 'r') as fi: 
    lines = fi.read().splitlines() 

lines = [line.split() for line in lines] 

with open('answer.txt', 'w') as fo: 
    for column in range(len(lines)): 
     if (column + 1) % 3: 
      fo.write('%s %s\n' % (lines[column][0], lines[column][2])) 
Смежные вопросы