我有一个问题。我编写了以二进制模式(为了速度)读取文件的代码,然后将我从正则表达式匹配中读取的内容解码为一组。问题在于该集合采用这些解码后的字符串并将它们转换为字符。如果您有“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
提交
取消