【问题标题】:Python: Output of text file using sys.argvPython:使用 sys.argv 输出文本文件
【发布时间】:2021-06-17 09:47:19
【问题描述】:

我正在编写一个应该使用“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 个参数。

关于如何解决此问题的任何想法?谢谢:)

【问题讨论】:

    标签: python function if-statement text-files sys


    【解决方案1】:

    根据Python docs

    argv[0] 是脚本名称(取决于操作系统是否是完整的 > 路径名)

    所以if len(sys.argv) == 1: 将始终评估为True

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

    【讨论】:

    • 感谢您的帮助!不幸的是,即使我尝试更改参数位置,它仍然无法正常工作......
    【解决方案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
    

    【讨论】:

    • 谢谢!第一个“if”现在可以工作,但第二个仍然没有......我在搜索 Annas 消息时得到这个输出:82074eaff0445f8b3ef3ebd333b20c2/.2f2dcd8726f74a8a82379c0b11b5cde9//lab2_1.txt 我的第二个“if”看起来像这样:elif len(sys .argv) == 3: if 'Lab2_1.py' in sys.argv and 'lab2_1.txt' in sys.argv: messages = read_file(sys.argv[2]) name1 = input('输入要搜索的名称: \n') display_entry(name1, messages)
    • 这可能是您的read_file()display_entry() 函数的问题
    • 这是真的!我去看看,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多