2016-11-23 7 views
0

У меня есть большой файл (около 80 000 строк), и я хочу сохранить каждый 10-строчный блок в отдельный список. В течение первых трех блоков 10-линии у меня есть:Зацикливание по N строкам файла и сохранение в списках перемножений

N=10 #Number of lines per block 

with open("file", "r") as myfile: 
     profile1 = list(islice(myfile, 0,N)) 
     profile2 = list(islice(myfile, 0,N)) 
     profile3 = list(islice(myfile, 0,N)) 

я ожидаю получить несколько сотен из этих блоков 10-линии, так что это явно не очень хороший способ сделать это.

Как включить создание списка и функцию islice в цикл?

Спасибо заранее!

+0

сделать 'профиль = [] 'и просто« добавить »новые списки на то, что – depperm

+0

не будет создавать только один список, называемый« профиль », и привести к тому, что все хранится в там? – XBB

+0

да, но тогда вы знаете, индекс 0 - профиль1, 1 - профиль2 и т. Д., И это будет работать для разных файлов. – depperm

ответ

2

Используйте следующее:

with open('file', 'r') as f: 
    lines = f.readlines() 
chunks = [lines[item:item+10] for item in range(0, len(lines), 10)] # with Python 2 you can use xrange instead of range for large lists 

Для преобразования каждого фрагмента в массиве, попробуйте следующее:

import numpy as np 

my_arrays = [np.asarray(chunk) for chunk in chunks] 
+0

Чтобы превратить первый кусок в массив, который я пробовал: set1 = np.genfromtxt (куски [0], skip_header = 2, usecols = [1,2,3]) Могу ли я сделать что-то подобное с циклом, чтобы сделать все куски массивов? – XBB

+0

Взгляните на мой отредактированный ответ – ettanany

1

Вы можете попробовать это:

import numpy as np 

# read the file in lines 
with open('file.txt','r') as f: 
    lines = f.read().splitlines() 

# use a list comprehension to split your list in chunks of 10 
list_of_lists = [lines[i:i + 10] for i in xrange(0, len(lines), 10)] 

# 1st chunks of 10 
print list_of_lists[0] 
# 4th chunks of 10 
print list_of_lists[3] 

# update - turn into arrays 
list_of_arrays = [] 
for i in list_of_lists: 
    arr = np.asarray(i) 
    list_of_arrays.append(arr) 
+0

Есть ли способ перебрать каждый из подписок, чтобы каждый из них имел свой собственный массив? – XBB