2017-01-27 2 views
-2

У меня есть Python, который будет читать каждые x секунд CSV-файл.Weird loop в синтаксическом анализаторе CSV

Что я делаю:

        Открыть файл, прочитать информацию, как CSV, зацикливание каждую запись

Это делается в этом файле Python:

import csv 
import time 
import datetime 


CSV_PLAN = "./XoceKochPlan.csv" 
chargePlanFile = open(CSV_PLAN, 'rt') 

def loopMe(): 
    try: 
     for eachRow in reader: 
      print (eachRow) 
    except Exception, ex: 
     print ("Error processFileing the Thread" + str(ex)) 


print ("opening file " + str(CSV_PLAN)) 
now = datetime.datetime.utcnow().strftime("%a %b %d %H %M %S %Z %Y") 
print ("Now " + str(now)) 
reader = csv.reader(chargePlanFile) 

loopMe() 

выход настолько хорош.

Но если я:

loopMe() 
time.sleep(10) 
loopMe() 

тогда файл печатается только один раз!

Вопрос Почему?

Что мне не хватает? Что получает внутренне потребляется, или читатель просто пуст после первого цикла?

+0

Перед тем, как ваш читатель все еще находится в конце файла. – iFlo

+1

Вы должны переназначить: 'reader = csv.reader (chargePlanFile)' – iFlo

+0

@iFlo: нет, после повторного чтения файла еще один цикл! –

ответ

0

Когда вы запускаете второй цикл, ваш читатель уже находится на последней строке. Вы должны переназначить читателя. Вы должны сделать это внутри своей функции loopMe в начале.

def loopMe(): 
    reader = csv.reader(chargePlanFile) 
    try: 
     for eachRow in reader: 
      print (eachRow) 
    except Exception, ex: 
     print ("Error processFileing the Thread" + str(ex)) 

Если бы сохранить тот же код, просто добавьте reader.seek(0) в первой строке loopMe

+0

Не работает для меня! –

+0

Вы попробовали 'reader.seek (0)'? – iFlo

1

В питона файл И.О. обработчик имеет внутренний указатель. После прочтения файла он будет в конце файла csv. Убедитесь, что вы вызываете метод chargePlanFile.close() и снова открываете файл перед вызовом функции loopme(). Или используйте chargePlanFile.seek(0) для сброса позиции внутреннего указателя.

Смежные вопросы