CSV文件解析器中的奇怪循环

时间:2017-01-27 13:30:19

标签: python loops csv

我有一个Python,每隔 x 秒读取一个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()

然后文件只打印一次!

问题是为什么?

我错过了什么?什么是内部消耗,或者读者在第一次循环后只是空了?

2 个答案:

答案 0 :(得分:1)

在python中,文件io处理程序有一个内部指针。读取文件后,它将位于csv文件的末尾。确保在调用chargePlanFile.close()函数之前调用loopme()方法并重新打开文件。或者使用chargePlanFile.seek(0)重置内部指针的位置。

答案 1 :(得分:0)

当您开始第二个循环时,您的阅读器已经在最后一行。你应该重新分配读者。您应该在开始时在1:aa:bb:c:d0:e1函数内部执行此操作。

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)