我有一个脚本,使用大段文本来训练模型。目前它的写法是要么从文件中读取,要么从标准输入中读取。
parser.add_argument('-i', help='input_file', default=sys.stdin)
... # do a bunch of other stuff
if args.i is sys.stdin:
m.train(args.i)
else:
m.train(open(args.i, 'r'))
然后我可以这样调用我的脚本:
python myscript.py -i trainingdata.txt
或者
cat trainingdata.txt | python myscript.py
第二个版本特别适用于我想要搜索文件系统并使用多个文件来训练模型的情况。但是,如果我同时尝试使用进行性能分析,由于管道的原因,这可能变得棘手。
python -m cProfile myscript.py ...
我知道可以使用
-i
选项发送多个文件,并迭代处理这些文件, 但是这样会需要更改train()
方法的行为以避免覆盖数据。有没有一种好的方法来打开IO通道,简单说就是能够连接输入,而不用显式地逐行读取和写入呢?
fileinput
模块非常擅长将作为参数和可选标准输入的文件连接起来。也许你应该看一下它... - Serge Ballesta