我怎样才能使这个函数在pythonical方面更有效率?

2024-10-03 04:36:34 发布

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

我正在为一个自动化的工作流程编写脚本。它希望CSV和磁盘映像出现在作为提供的目录中参数输入. 你知道吗

我想检查并处理每一个可能的场景:没有CSV,没有磁盘映像,太多CSV,太多磁盘映像,以及任何可能的组合。你知道吗

我已经写了下面,这是工作,似乎是人类可读的,但它只是似乎令人难以置信的过度和冗长-有什么办法,我可以使这更紧凑,但仍然保留其易读性?你知道吗

# CONFORMANCE CHECKS
def check_conformance():
    csv = glob.glob(args.input+'*.csv')
    disk_image = glob.glob(args.input+'*.E01')

    if len(csv) == 1:
        does_csv_exist = os.path.isfile(csv[0])
    elif len(csv) < 1:
        does_csv_exist = False
    elif len(csv) > 1:
        does_csv_exist = "too many CSVs!"
    if len(disk_image) == 1:
        does_E01_exist = os.path.isfile(disk_image[0])
    elif len(disk_image) < 1:
        does_E01_exist = False
    elif len(disk_image) > 1:
        does_E01_exist = "too many Disk Images!"
    if len(disk_image) > 1 and len(csv) > 1:
        does_csv_exist = "too many CSVs!"
        does_E01_exist = "too many disk images!"
        return (False, does_csv_exist, does_E01_exist,)
    if does_E01_exist is True and does_csv_exist is True:
        return True
    elif does_E01_exist is True and does_csv_exist is False:
        return (False, "CSV is missing")
    elif does_E01_exist is False and does_csv_exist is True:
        return (False, "E01 disk image is missing")
    elif does_E01_exist is False and does_csv_exist is False:
        return (False, "E01 disk image AND csv are missing")
    elif does_csv_exist is not True and does_csv_exist is not False:
        return (False, does_csv_exist)
    elif does_E01_exist is not True and does_E01_exist is not False:
        return (False, does_E01_exist)

Tags: andcsvimagefalsetruelenreturnis
1条回答
网友
1楼 · 发布于 2024-10-03 04:36:34

我不确定这个函数的确切用途,但这里有一些提示:

  • 一个函数应该只有一个函数。无论输入是否符合您的标准(True/False返回某种错误字符串(str),您的输入似乎都有多个返回。返回的元组以不可预知的方式组合了这两个东西。选择一个或另一个,或者标准化元组并始终返回相同的精确元组(即(bool, str)

  • 即使您可以为同一个变量设置多个不同的类型,也不应该这样做。不要在一个条件中设置布尔值,然后在另一个条件中设置字符串(请参见:does_csv_exist

我会这样做:

# CONFORMANCE CHECKS
# Returns a list of error strings encountered, empty list if OK
def getConformanceErrors():
    csv = glob.glob(args.input+'*.csv')
    disk_image = glob.glob(args.input+'*.E01')

    msg = []

    if len(csv) < 1:
        msg.append("CSV is missing")
    elif len(csv) > 1:
        msg.append("Too many CSVs")  

    if len(disk_image) < 1:
        msg.append("Disk Image is missing")
    elif len(disk_image) > 1:
        msg.append("Too many Disk Images") 

    return msg

相关问题 更多 >