我有一個問題。我編寫了以二進制模式(為了速度)讀取文件的代碼,然后將我從正則表達式匹配中讀取的內容解碼為一組。問題在于該集合采用這些解碼后的字符串并將它們轉換為字符。如果您有“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"
從 Binary 解碼為 String 成 Set 將 string 拆分為
ibeautiful
2023-01-04 13:35:34