我在编码挑战中停靠点,指定我需要从STDIN读取。这是我的输入法:
def __init__(self, input):
self._dictionary = {}
with open(input, 'r') as f:
reader = csv.reader(f, delimiter='\t')
for row in reader:
if self._dictionary.__contains__(row[0]):
self._dictionary[row[0]].append(row[1])
else:
self._dictionary.update({row[0]: row[1].split()})
并在脚本的末尾
if __name__ == "__main__":
script = Script(sys.argv[1])
for line in script.output_method():
print line
在要求从标准输入读取的挑战中使用sys.argv是错误的吗?有什么区别?我应该怎样做才能满足要求?
答案 0 :(得分:5)
它们不一样:
>>> import sys
>>> sys.argv == sys.stdin
False
sys.argv中
sys.stdin sys.stdout的 sys.stderr
正如@Vivek Rai在评论中提到的那样,您可以使用sys.stdin.readlines()
从标准中读取。此外,fileinput
可供您使用,这似乎完全符合您的要求。
import fileinput
for line in fileinput.input():
process(line)
这会遍历sys.argv [1:]中列出的所有文件的行, 如果列表为空,则默认为sys.stdin。如果文件名为' - ',则为 也被sys.stdin取代。指定替代列表 文件名,将其作为input()的第一个参数传递。单个文件 名字也是允许的。