Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 返回满足特定条件的项目列表的更好方法,而不是+=_Python 2.7_Formatting_Converter - Fatal编程技术网

Python 2.7 返回满足特定条件的项目列表的更好方法,而不是+=

Python 2.7 返回满足特定条件的项目列表的更好方法,而不是+=,python-2.7,formatting,converter,Python 2.7,Formatting,Converter,请原谅我的无知,但我对python还是新手。 我正在尝试在Python2.7中修改一个转换器,我发现要使一些函数按我喜欢的方式工作非常困难,因此非常感谢您的帮助。 我有这些特定的代码部分 def int2hex(self, int): return ("%x" % int) def Caids(self): caids = "" service = self.source.service if service: info = se

请原谅我的无知,但我对python还是新手。 我正在尝试在Python2.7中修改一个转换器,我发现要使一些函数按我喜欢的方式工作非常困难,因此非常感谢您的帮助。 我有这些特定的代码部分

    def int2hex(self, int):
    return ("%x" % int)

    def Caids(self):
    caids = ""
    service = self.source.service
    if service:
        info = service and service.info()
        if info:
            caids = list(set(info.getInfoObject(iServiceInformation.sCAIDs)))
    return caids


def CaidList(self):
    caids = self.Caids()
    caidlist = ""
    if caids:
        for caid in caids:
            caid = self.int2hex(caid).upper().zfill(4)
            if (len(caids) > 1):
                caidlist = ", ".join("{:04x}".format(x) for x in caids).upper()
            else:
                caidlist += caid
    return caidlist
在上面的代码中,我成功地创建了一个十六进制列表字符串,其中包含了特定元素(CAID)和list(set(info.getInfoObject(iServiceInformation.sCAIDs)),并删除了重复项。然后我获取每个caid,将其转换为十六进制,并返回一个新的caidlist,其中包含相同的元素,用逗号和空格分隔。到目前为止一切都很好。结果是一个十六进制数列表,如0500、0502、0100、0D07等。 当我想通过满足某些条件将每个caid转换为文本元素时,问题就出现了

我在前面的代码之后编写了以下代码:

def CaidTxtList(self):
    caids = self.Caids()
    caidtxt = ""

    if caids:
        for caid in caids:
            caid = self.int2hex(caid).upper().zfill(4)
            if str(caid).startswith("01"):
                caid = "Seca"
            if str(caid).startswith("05"):
                caid = "Viaccess"
            if str(caid).startswith("06"):
                caid = "Irdeto"
            if str(caid).startswith("0D"):
                caid = "CryptoWorks"
            caidtxt += caid
            caidtxt += " "
    return caidtxt
在上面的代码中,我成功地将每个caid转换为等效的文本。结果是一个对应于每个十六进制caid的单词字符串,但我还没有获得join命令的结构,就像它们的十六进制等价物一样,就像CaidList部分一样

使用caidText+=caid,我得到的是Viaccess、Viaccess、Seca、CryptoWorks(空白)

我努力实现的目标是:

  • 返回一个包含文本的字符串,其中每个caid由等效文本替换。这已经完成,但我想更改格式
  • 最后删除重复的条目和多余的空格。在Viaccess、Viaccess、Seca、Cryptoworks中,如何使Viaccess只出现一次并删除尾随空格? 我尝试了join和set,但每次都出现连接错误(set和str),或者字符串中的字母混淆
  • 简言之,在CaidList部分中所做的事情我希望在CaidTxtList部分中使用不重复的单词

  • 我知道我离得很近,我觉得自己很愚蠢,因为我不知道该如何走得更远。我看过很多文档和例子,但我尝试过的一切都失败了。因此,如果有任何方法来实现我喜欢的格式,请帮助我

    我很想帮忙,但我很难通过模拟输入和输出来复制您的结果。。将
    caids=self.caids()
    替换为示例列表
    caids=[0x1811、0x0500、0x0D07]
    通过访问0D07打印
    1811,但这似乎没有用。知道我们如何重现您的结果吗?第一个命令caids=list(set(info.getInfoObject(iServiceInformation.sCAIDs)))它所做的是读取加密卫星频道的caid,将它们放入列表并删除重复项。这些CAID是十进制数字形式。例如,如果服务有三个不同的CAID(比如Viaccess、Seca、Nagravision),则字符串将为1280 256 3479。这就是self.Caids()所做的。现在我想要这个十六进制的列表,没有0x。因此,我使用def int2hex将列表中的每个caid转换为等价的0500 0100 0D97。在def CaidList()函数中,我将其转换为我喜欢的格式,即所需的格式0500、0100、0D97。这很好。如果我想重复这个函数,事情会变得复杂,但不是0500、0100、0D97来生成文本字符串Viaccess、Seca、Nagravision。使用+=命令我可以这样做,但格式不是我想要的,它返回Seca、Viaccess、Nagravision(空白)。等价物使用代码的if部分进行转换。startswith(“05”)将从05开始的所有内容转换为Viaccess,依此类推。但如果我有两个以05开头的CAID,它将两次显示Viaccess。我想将其唯一化。我尝试加入并设置,但失败了。随着设置,字母似乎混淆了。使用join时,我根本无法返回CAID,因为我不知道如何创建caidlist以将其输入join函数。感谢您的进一步解释,但您是否可以创建一个?我很想提供帮助,但我很难通过模拟输入和输出来复制您的结果。。将
    caids=self.caids()
    替换为示例列表
    caids=[0x1811、0x0500、0x0D07]
    通过访问0D07打印
    1811,但这似乎没有用。知道我们如何重现您的结果吗?第一个命令caids=list(set(info.getInfoObject(iServiceInformation.sCAIDs)))它所做的是读取加密卫星频道的caid,将它们放入列表并删除重复项。这些CAID是十进制数字形式。例如,如果服务有三个不同的CAID(比如Viaccess、Seca、Nagravision),则字符串将为1280 256 3479。这就是self.Caids()所做的。现在我想要这个十六进制的列表,没有0x。因此,我使用def int2hex将列表中的每个caid转换为等价的0500 0100 0D97。在def CaidList()函数中,我将其转换为我喜欢的格式,即所需的格式0500、0100、0D97。这很好。如果我想重复这个函数,事情会变得复杂,但不是0500、0100、0D97来生成文本字符串Viaccess、Seca、Nagravision。使用+=命令我可以这样做,但格式不是我想要的,它返回Seca、Viaccess、Nagravision(空白)。等价物使用代码的if部分进行转换。startswith(“05”)将从05开始的所有内容转换为Viaccess,依此类推。但如果我有两个以05开头的CAID,它将两次显示Viaccess。我想将其唯一化。我尝试加入并设置,但失败了。随着设置,字母似乎混淆了。使用join时,我根本无法返回CAID,因为我不知道如何创建caidlist,以便在join函数中输入它。感谢您的进一步解释,但是您是否可以创建一个caidlist?