我在一次编码挑战中被扣分,该挑战指定我需要从 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
我在要求从 stdin 读取的挑战中使用 sys.argv 是错误的吗?有什么不同?我应该做什么来满足要求?
他们不一样:
>>> import sys
>>> sys.argv == sys.stdin
False
sys.argv
系统标准输入系统标准输出
系统标准错误
- 对应于解释器的标准输入、输出和错误流的文件对象。 stdin 用于除脚本之外的所有解释器输入,但包括对 input() 和 raw_input() 的调用。
正如 @Vivek Rai 在评论中提到的,你可以使用sys.stdin.readlines()
从标准中读取。此外,fileinput https://docs.python.org/2/library/fileinput.html,可供您使用,这似乎完全符合您的要求。
import fileinput
for line in fileinput.input():
process(line)
这会迭代 sys.argv[1:] 中列出的所有文件的行,
如果列表为空,则默认为 sys.stdin。如果文件名是“-”,则
也被 sys.stdin 取代。指定替代列表
文件名,将其作为第一个参数传递给 input()。单个文件
名称也是允许的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)