添加到集合中直到 "full",然后在再次填充集合之前写入 csv
Add into set until "full", then write to csv before filling set again
由于在完成之前与源断开连接,我正在流式传输大量需要分块处理的数据。我想向集合中添加元素,直到 len(set)
等于某个数字,比如 1000。一旦达到 1000,我想将该集合的内容写入一个 csv 文件进行存储。写完后,我想清空集合并继续添加元素,直到过程完成。因为集合的末尾可能不是一个 1000 长的集合,所以我还想要一种方法来将最后一个集合(无论大小 < 1000)写入 csv。
我试过以下方法:
import csv
chunk = set()
for result in source:
if len(chunk) <= 1000:
chunk.add(element)
elif len(chunk) == 1000:
with open('file.csv', 'a') as csvfile:
writer = csv.writer(csvfile)
for element in chunk:
row = [element]
writer.writerow(row)
else:
with open('file.csv', 'a') as csvfile:
writer = csv.writer(csvfile)
for element in chunk:
row = [element]
writer.writerow(row)
我的逻辑是,我将向集合中添加元素,直到 len(set)
为 1000,然后我将其写入 csv。如果两个条件都不成立,我也想将其写入 csv。不幸的是,在执行时,什么也没有写,我相信它可能与潜在冲突的 if
和 else
语句有关。
您应该将最后打开的那个移到循环之外。你有几个错误,所以我做了一些整理...
import csv
chunk = set()
for result in source:
chunk.append(result)
if len(chunk >= 1000):
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()
if chunk:
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()
如果你不喜欢写两次保存逻辑,你可以使用两个循环
import csv
chunk = set()
source_iter = iter(source)
have_data = True
while have_data:
for result in source_iter:
chunk.append(result)
if len(chunk >= 1000):
break
else:
have_data = False
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()
由于在完成之前与源断开连接,我正在流式传输大量需要分块处理的数据。我想向集合中添加元素,直到 len(set)
等于某个数字,比如 1000。一旦达到 1000,我想将该集合的内容写入一个 csv 文件进行存储。写完后,我想清空集合并继续添加元素,直到过程完成。因为集合的末尾可能不是一个 1000 长的集合,所以我还想要一种方法来将最后一个集合(无论大小 < 1000)写入 csv。
我试过以下方法:
import csv
chunk = set()
for result in source:
if len(chunk) <= 1000:
chunk.add(element)
elif len(chunk) == 1000:
with open('file.csv', 'a') as csvfile:
writer = csv.writer(csvfile)
for element in chunk:
row = [element]
writer.writerow(row)
else:
with open('file.csv', 'a') as csvfile:
writer = csv.writer(csvfile)
for element in chunk:
row = [element]
writer.writerow(row)
我的逻辑是,我将向集合中添加元素,直到 len(set)
为 1000,然后我将其写入 csv。如果两个条件都不成立,我也想将其写入 csv。不幸的是,在执行时,什么也没有写,我相信它可能与潜在冲突的 if
和 else
语句有关。
您应该将最后打开的那个移到循环之外。你有几个错误,所以我做了一些整理...
import csv
chunk = set()
for result in source:
chunk.append(result)
if len(chunk >= 1000):
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()
if chunk:
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()
如果你不喜欢写两次保存逻辑,你可以使用两个循环
import csv
chunk = set()
source_iter = iter(source)
have_data = True
while have_data:
for result in source_iter:
chunk.append(result)
if len(chunk >= 1000):
break
else:
have_data = False
with open('file.csv', 'a') as csvfile:
csv.writer(csvfile).writerows([element] for element in chunk)
chunk = set()