gpt4 book ai didi

python - 在更新文件时使用 Python csv 模块

转载 作者:太空狗 更新时间:2023-10-30 02:35:35 25 4
gpt4 key购买 nike

我正在使用 python 的 csv 模块从一个不断被外部工具更新的 csv 中提取数据。我遇到了一个问题,当我到达文件末尾时出现 StopIteration 错误,但是,我希望脚本继续循环等待外部工具添加更多行。

到目前为止,我想到的是:

f = open('file.csv')
csvReader = csv.reader(f, delimiter=',')
while 1:
try:
doStuff(csvReader.next())
except StopIteration:
depth = f.tell()
f.close()
f = open('file.csv')
f.seek(depth)
csvReader = csv.reader(f, delimiter=',')

这具有预期的功能,但看起来也很糟糕。在捕获 StopIteration 之后循环是不可能的,因为一旦 StopIteration 被抛出,它将在每次后续调用 next() 时抛出 StopIteration。任何人对如何以这样一种方式实现它有任何建议,我不必做这种愚蠢的讲述和寻求?或者有一个不同的 python 模块可以轻松支持此功能。

最佳答案

您的问题不在于 CSV 阅读器,而在于文件对象本身。您可能仍然需要做您在上面的代码片段中所做的疯狂旋转,但最好创建一个文件对象包装器或子类来为您完成它,并将其与您的 CSV 阅读器一起使用。这使得复杂性与您的 csv 处理代码隔离开来。

例如(警告:未经测试的代码):

class ReopeningFile(object):
def __init__(self, filename):
self.filename = filename
self.f = open(self.filename)

def next(self):
try:
self.f.next()
except StopIteration:
depth = self.f.tell()
self.f.close()
self.f = open(self.filename)
self.f.seek(depth)
# May need to sleep here to allow more data to come in
# Also may need a way to signal a real StopIteration
self.next()

def __iter__(self):
return self

然后您的主要代码变得更简单,因为它不必管理文件重新打开(请注意,您也不必在文件重新启动时重新启动 csv_reader:

import csv
csv_reader = csv.reader(ReopeningFile('data.csv'))
for each in csv_reader:
process_csv_line(each)

关于python - 在更新文件时使用 Python csv 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com