Как войти в цикл enumarate () более одного раза - PullRequest
0 голосов
/ 03 мая 2018

Я хочу прочитать файл больших данных 100 на 100. Но мой скрипт читает только первые 100 строк, затем он никогда не входит в цикл for для остальных. Более четко, в конце я получаю только строки от 0 до 100, но я хочу также 100-200, 200-300, 300-400 и т. Д. Я не вижу, в чем проблема.

(я использую python 3.4. Все данные в файле .csv являются числами. Я уже знаю, что нужно использовать islice(), но я особенно хочу использовать функцию enumerate().)

Я был бы очень рад, если бы вы могли помочь.

pathInput = "input.csv"
f = open(pathInput, 'r')
sizeOfList = 100
iD = 0
while iD<1000:
    dataset = []
    for i, line in enumerate(f):
       if i<(iD + sizeOfList):
           dataset.append(line)
    print(dataset)
    iD += sizeOfWindow

1 Ответ

0 голосов
/ 03 мая 2018

По сути, файловые объекты не являются списком, но у них есть курсор, который перемещается в конец файла при вызове read (что в основном делает enumerate). Курсор в основном помещается в конец файла, и поэтому во втором цикле больше ничего не читается.

Это можно решить двумя способами:

1) Сначала прочитайте весь файл в память и поместите вызов enumerate в список, например ::10000

pathInput = "input.csv"
f = open(pathInput, 'r')
idx_line = enumerate(f)
id = 0
while id < 1000:
    dataset = []
    for idx, line in items:
        ...

2) Вызвать seek объекта файла, чтобы вернуться к началу файла перед вызовом enumerate(f).

while id < 1000:
    f.seek(0)
    dataset = []

Также см .:

Однако, учитывая, что у вас, вероятно, есть файл CSV, вы, вероятно, захотите попробовать следующее:

...