我收到了各种.csv文件,每个文件我需要识别与最长列表关联的密钥;并打印该密钥。以及仅出现在csv文件的最后一列中的值,并打印该值。我被鼓励使用命令行参数,我是新手,所以我很难用这个。以下是给出的csv文件的示例:
草蜢,草
蜥蜴,草蜢
鹰,蚱蜢,蜥蜴,兔子,老鼠,蛇
兔,草
蛇,鼠
老鼠,草
所以我试图打印的列表最长的键是Hawk。 这是我到目前为止的代码:
import sys
import csv
if len(sys.argv) != "":
inf = open(sys.argv[0], "r")
outf = open(sys.argv[1], "w")
words = 0
maxvalue = 0
line = inf.readline()
for line in data:
while line != "":
words = words + len(line.split())
maxvalue = maxvalue + words
if words > value:
maxline = words
# Read the next line from the file.
line = inf.readline()
outf.write(str(maxvalue))
但由于我对命令行参数知之甚少,因此我无法使用索引错误,而且我不确定如何解决它。 在此代码之前,我已打开/读取文件。我正在使用 python3 ,任何帮助都将不胜感激! 谢谢!
答案 0 :(得分:0)
您需要将if
条件更改为:
if sys.argv:
答案 1 :(得分:0)
您需要将if
条件更改为:
if sys.argv[1:]:
[1:]
表示sys.argv
中除第一个'之外的所有元素。如果没有命令行参数,sys.argv[1:]
将是一个空列表,其值为False
。非空列表的评估结果为True
。
sys.argv
的第一个元素是文件名(如果您在REPL中,则为''
),所以
if sys.argv:
始终评估为True
。
在REPL
中尝试此操作>>> import sys
>>> sys.argv
['']
>>> bool(sys.argv)
True
>>> sys.argv[1:]
[]
>>> bool(sys.argv[1:])
False
>>> if sys.argv:
... print('aaa')
...
aaa
>>> if sys.argv[1:]:
... print('aaa')
...
>>>