我必须读取通过管道传输到Python程序中的文本文件的内容。
1.程序必须接受来自两个来源的输入:在命令行参数和STDIN中传递的文件名。例如,在Linux或OSX上,./myprogram input.txt
和./myprogram < input.txt
都应该工作。
我不知道该怎么做。
if __name__ == '__main__':
# I don't know what to do here.
输入文件有以下几行,每一行都需要解析。
Add Tom 4111111111111111 $1000
Add Lisa 5454545454545454 $3000
Add Quincy 1234567890123456 $2000
Charge Tom $500
Charge Tom $800
Charge Lisa $7
Credit Lisa $100
Credit Quincy $200
每当我尝试python myprogram.py > input.txt
时,程序就会挂起。如果有帮助的话,我使用的是Python 3. 6. 5。
更新:
我尝试了一些类似的方法:
(env) myproject (master) $ python main.py > test.txt
testing testing testing
1 2 3
1 2 3
如果文件不存在,则创建一个新文件,或者用输入的内容覆盖现有文件。在这种情况下,将用上述内容创建一个名为test.txt
的新文件。
更新编号2
我试过这样
if __name__ == '__main__':
for line in sys.stdin.readline():
print (line)
像这样的一条线
Add Tom 4111111111111111 $1000
每个字符都显示在新行中,如下所示
A
d
d
T
o
m
. . .
我希望所有字符都打印在一行上。
2条答案
按热度按时间iezvtpos1#
sys.argv
是一个列表,其中包含调用程序时使用的参数(如果有)。如果它只有一个元素长,那么调用程序时没有任何参数(脚本名本身是第一个参数,所以实际上不算),因此应该从
sys.stdin
读取。否则,如果它有两个或多个元素,则调用程序时将文件名作为参数,因此应该打开该文件并将其用作输入。
c7rzv4ha2#
这对我来说效果最好。https://docs.python.org/3/library/fileinput.html
这将遍历sys.argv [1:]中列出的所有文件的行,如果列表为空,则缺省为sys.stdin
经过一段时间的尝试和错误,这是我得出的结论
这将打印每一行。
在我的单元测试中