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