我有一个问题。我编写了以二进制模式(为了速度)读取文件的代码,然后将我从正则表达式匹配中读取的内容解码为一组。问题在于该集合采用这些解码后的字符串并将它们转换为字符。如果您有“14(xx) 23(WP)”,正则表达式将得到 WP 和 xx。应该发生的是,它随后将获取 WP 和 xx 并将其作为一个元素放入 logbinset 中。然而,当它出现时,它变成 {'W', 'P', 'x', 'x'} 而不是 {"WP", "xx"} 我在使用列表时没有这个问题。但是我想避免使用列表,因为它包含重复项并且我不需要重复值。此外,集合的读取和迭代速度更快,我不需要额外的代码行来确保我的列表不会重复。为什么我的琴弦会发生这种分裂?我还尝试在不解码的情况下接收二进制文件,但 Set 出于某种原因将其转换为 Int。我的程序和 Python 的集合结构有什么问题?:def odfs_bin_conversion_table_check(bintablecsv, filename):bincsv_df = pd.read_csv(bintablecsv)setbincsv_df = set(bincsv_df['MicronBin'])with open(filename, "rb", buffering=102400) as lines:    regex = re.compile(rb"\d+\((.+)\)\s+\d+\((.+)\)")    logbinset = set()    logbinlist = []    missingbins = ""    for match in filter(bool, map(regex.search, lines)):  # if search in lines, put it in match        #logbinset.update(match.group(1))  # put matches inside logbinset        logbinset.update((match.group(1)).decode('UTF-8','strict'))        logbinlist.append((match.group(1)).decode())        print(match.group(1))        #print((match.group(1)).decode() + " " + (match.group(1)).decode()) #visual check. Can be commented out    for x in logbinset:        print(x)        if x not in setbincsv_df:            print(type(x))            #missingbins += x.decode() + ","    if len(missingbins) > 0:        return missingbins[:-1] + " are not in conversion table"
                    
                    
                1 回答
 
                    
                    
                            摇曳的蔷薇
                            
                                
                            
                        
                        
                                                
                    TA贡献1793条经验 获得超6个赞
这与正则表达式或以二进制模式读取文件完全无关。
set.update将其参数视为可迭代对象,并将可迭代对象的每个元素添加到集合中。字符串是可迭代的,其中迭代产生单个字符:
>>> for x in 'WP':
... print(x)
W
P
因此,对于set.update,这会产生一组字符:
>>> s = set()
>>> s.update('WP')
>>> s
{'W', 'P'}
要将字符串"WP"作为一个项目添加到集合中,请使用以下add方法:
>>> s = set()
>>> s.add('WP')
>>> s
{'WP'}
添加回答
举报
0/150
	提交
		取消
	