添加微型resume函数,用于csv读取迭代器
csvresumable的Python项目详细描述
CSS可消费
为csv读取迭代器添加微小的resume函数。
示例
00英里/年
importsysimportosimportrandomfromioimportStringIOfromcsvresumableimportDictReaderdata="""\id,name1,foo2,bar3,boo"""random.seed(int(os.environ.get("SEED","0")))forrowinDictReader(StringIO(data)):n=random.random()ifn<0.5:print("fail {}".format(n),file=sys.stderr)sys.exit(0)print("\t",row["name"])print("finished")
继续直到成功。
SEED=0 python 00main.pyfail 0.420571580830845 foo barSEED=1 RESUME=1 python 00main.pyfail 0.13436424411240122SEED=2 RESUME=1 python 00main.py boofinishedSEED=5 python 00main.py foo bar boofinished
或者使用resume
选项设置(运行此脚本,例如python 01main.py --resume
)
--- 00main.py 2018-06-16 04:19:51.573578443 +0900+++ 01main.py 2018-06-16 04:20:04.760554103 +0900@@ -4,17 +4,23 @@ from io import StringIO from csvresumable import DictReader -data = """\+data = """ id,name 1,foo 2,bar 3,boo """ +import argparse+parser = argparse.ArgumentParser()+parser.add_argument("--seed", default=0, type=int)+parser.add_argument("--resume", action="store_true")+args = parser.parse_args()+ random.seed(int(os.environ.get("SEED", "0"))) -for row in DictReader(StringIO(data)):+for row in DictReader(StringIO(data), resume=args.resume): n = random.random() - if n < 0.5:+ if n > 0.8: print("fail {}".format(n), file=sys.stderr) sys.exit(0) print("\t", row["name"])
多文件
fromcsvresumableimportDictReaderfiles=["a.csv","b.csv"]forfinfiles:r=DictReader(f)forrowinr:do_something(row)