我在我的代码中使用sys.stdin,我想知道如何在多个文本文件上测试我的代码。 我的代码(test.py)是:
for line in sys.stdin:
line = line.strip()
words = line.split()
我正在尝试在2个文本文件上测试它,所以我输入终端:
echo "test1.txt" "test2.txt" | test.py
但它不起作用,所以我只想知道如何在2个文本文件上测试代码?
答案 0 :(得分:1)
echo "test1.txt" "test2.txt" | test.py
实际上不会运行test.py
,而是需要使用此命令:
echo "test1.txt" "test2.txt" | python test.py
然而,另一种获取python参数的方法是:
import sys
for arg in sys.argv:
print line
当这样运行时:
python test.py "test1" "test2"
产生以下输出:
test.py
test1
test2
argv
的第一个参数是程序的名称。这可以跳过:
import sys
for arg in sys.argv[1:]:
print line
你似乎遇到的另一个问题是你假设python正在打开你在循环中处理它的文本文件 - 这不是真的。如果你在循环中打印,你会看到它只打印你最初给它的字符串。
如果您确实想要打开并解析文件,请在循环中执行以下操作:
import sys
args = sys.stdin.readlines()[0].replace("\"","").split()
for arg in args:
arg = arg.strip()
with open(arg, "r") as f:
for line in f:
line = line.strip()
words = line.split()
我们有这个奇怪的第一行的原因是stdin
是一个流,所以我们必须通过readlines()
读取它。
结果是一个包含单个元素的列表(因为我们只给了它一行),因此[0]
然后我们需要删除内部引号,因为在管道时不需要引号,这也可以工作:
echo test1.txt test2.txt | python test.py
最后,我们必须将字符串拆分为实际的文件名。