【问题标题】:Weird loop in a CSV file parserCSV 文件解析器中的奇怪循环
【发布时间】:2017-01-27 13:30:19
【问题描述】:

我有一个 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()

那么文件只打印一次!

问题是为什么?

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

【问题讨论】:

标签: python loops csv


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    当您开始第二个循环时,您的阅读器已经在最后一行。您应该重新分配读者。您应该在一开始就在 loopMe 函数中执行此操作。

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

    如果您要保留相同的代码,只需在loopMe 的第一行添加reader.seek(0)

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多