Python:使用sys.argv输出文本文件

2024-04-28 21:03:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个代码,其中我应该使用“sys.argv”来读取文本文件。我需要两个不同的输出,具体取决于输入参数。如果终端中的参数仅为“message.txt”,我希望输出为:

Anna
Hello Everyone
Kalle
Hi there
Anna
Coffee break?
Pelle
Absolutely
Kalle
Sure
Anna
Great, see you downstairs in 5 minutes

但是,如果输入是“Lab2_1.py”和“message.txt”,我想将文本文件发送到一个函数,在该函数中打印另一个输出。这个函数可以用,我以前试过

我在为输入参数考虑某种if语句,但我无法让它工作。现在,我将参数发送到函数的主要函数是(按照我希望的方式工作):

messages = read_file(sys.argv[1])
name1 = input('Enter a name to search for: \n')
display_entry(name1, messages)

我在想这样的事情(行不通):

if len(sys.argv) == 1:
    messages = read_file(sys.argv)
    print(messages)

else:
    messages = read_file(sys.argv)
    name1 = input('Enter a name to search for: \n')
    display_entry(name1, messages)

因此,第一条语句将仅以“原始”形式打印文本文件,就像上面的第一个代码块一样,而另一条语句将文本文件发送到函数并创建另一个输出。终端中最多有2个参数

有没有办法解决这个问题?谢谢:)


Tags: 函数代码txt终端messageread参数sys
2条回答

根据Python docs

argv[0] is the script name (it is operating system dependent whether this is a full > pathname or not)

因此if len(sys.argv) == 1:将始终计算为True

更改为if len(sys.argv) == 2:应该会有所帮助

sys.argv的第一项始终是正在执行的python文件的名称。这意味着len(sys.argv) == 1将是真的,即使没有给出任何参数

要解决此问题,您需要检查len(sys.argv) == 23

if len(sys.argv) == 2:
    print("target file: " + sys.argv[1])
    # do stuff here

elif len(sys.argv) == 3:
    if "foo.py" in sys.argv and "text.txt" in sys.argv:
        name = input("put name here:\n ")
        # do stuff with the name

相关问题 更多 >