1

我有一个 csv 文件所在的目录。代码读取文件并根据文件中的数据创建直方图。

但是,我试图让它在命令行中输入 csv 文件中的列标题之一,并且代码只会制作指定命令的图表。示例:python histogram_maker.py "C:/Folder" 区域。

我能够做到这一点,但我想添加一个会创建错误消息的部分,以防用户输入未在 csv 文件中指定的命令。示例:周界不存在。我的代码有什么问题?即使存在某些东西,我也会在命令提示符下出现 20 次“不存在”,但它仍然会生成我需要的所有文件。如何停止这种重复并使其仅在 csv 文件中没有内容时才会出现错误。

        for column in df:
            os.chdir(directory)
            if len(sys.argv)>2:
                for x in arguments:
                    if x.endswith(column):
                       #code for histogram
                    else: 
                        print "does not exist"
4

2 回答 2

6

您正在测试所有参数,即使只有一个匹配。对于每个不匹配的参数,您打印错误消息。

使用该any()函数查看是否有任何匹配项:

if len(sys.argv)>2:
    if any(x.endswith(column) for x in arguments):
        #code for histogram
    else: 
        print "does not exist"

或倒置测试;尽早使用not和纾困:

if len(sys.argv)>2:
    if not any(x.endswith(column) for x in arguments):
        print "does not exist"
        sys.exit(1)

    #code for histogram

如果any()使用生成器表达式有点难以理解,您仍然可以使用for循环,但您需要使用break来提前结束循环以及在循环提前退出else:时执行的套件:for

for x in arguments:
    if x.endswidth(column):
        break  # found a match
else:
    # `for` loop was not exited, so no match found
    print "does not exist"
    sys.exit(1)
于 2013-08-08T14:36:05.033 回答
0

也许你想要这样的东西......

    for column in df:
        os.chdir(directory)
        if len(sys.argv)>2:
            found = False
            for x in arguments:
                if x.endswith(column):
                   found = True
                   #code for histogram
                   break
            if (found == False):
                print "does not exist"
于 2013-08-08T14:39:17.797 回答