set(xml_files_list).intersection(set(jpg_files_list))中intersection的用法
时间: 2024-05-22 18:11:49 浏览: 108
`intersection()` 是 Python 中的一个集合操作函数,表示求两个集合的交集。在这个例子中,`set(xml_files_list)`和`set(jpg_files_list)`都将列表转化为了集合,然后用`intersection()`找到了两个集合的交集,即既在`xml_files_list`中又在`jpg_files_list`中的元素。最终返回的是这个交集的集合。
相关问题
解释代码 #加载数据 path_absolute_log = r"F:\数据处理比赛\BDC2023\处理数据log" paths_log_file = os.listdir(path_absolute_log) #获取绝对路径 def make_paths_absolute(paths_file): path_absolute = path_absolute_log paths_absolute_file = os.path.join(path_absolute,paths_file) return paths_absolute_file paths_absolute_log_file = list(map(make_paths_absolute,paths_log_file)) #对表格处理 path_absolute_log_file = r"F:\数据处理比赛\BDC2023\处理数据log\4ff8b802-0d87-11ee-af51-525400d4ffe4_log.csv" def form_data(path_absolute_log_file): data_log = pd.read_csv(path_absolute_log_file) data_log.insert(data_log.shape[1], 'id_score', np.nan) data_log.insert(data_log.shape[1], 'id', os.path.basename(path_absolute_log_file)[:-8]) data_log_message = data_log['message'] def jieba_data(data): data_log_jieba_message = [] data_log_jieba_message.append(','.join(jieba.cut_for_search(data))) print(data_log_jieba_message) return data_log_jieba_message data_log_jieba_message = data_log_message.map(jieba_data) def form_work(data): feature_words = ['bug','ERROR','WARNING','error','WARN','empty','错误','失败','未登录'] set_data = set(str(data)[2:-2].split(',')) set_feature_words = set(feature_words) set_mysql = set('mysql') score = [] if set_data.intersection(set_feature_words): score.append() if set_mysql.intersection(set_feature_words): score.append('LTE4MDK5Mzk2NjU1NiM1ODIONDC=') score = str(score)[2:-2] print(score) return score data_log['id_score'] = data_log_jieba_message.map(form_work) return data_log data_log = form_data(path_absolute_log_file)
这段代码的功能是对指定目录下的日志文件进行处理,包括加载数据、获取绝对路径、对表格进行处理。具体步骤如下:
1. 加载数据:指定日志文件所在的目录路径,获取该目录下所有的日志文件名。
2. 获取绝对路径:定义一个函数`make_paths_absolute`,用于将相对路径转换为绝对路径。通过`map`函数将每个日志文件名映射为绝对路径,并将结果存储在`paths_absolute_log_file`列表中。
3. 对表格处理:定义一个函数`form_data`,用于处理表格数据。首先读取指定的日志文件,然后插入两列新的空列`id_score`和`id`,用于存储处理结果。接着提取日志文件中的`message`列,并使用jieba库对文本进行分词处理,将处理结果存储在`data_log_jieba_message`中。
4. 定义一个内部函数`jieba_data`,用于将文本数据进行jieba分词处理。将分词结果以逗号分隔并放入列表中。
5. 定义一个内部函数`form_work`,用于根据特定的关键词对分词结果进行处理并计算得分。在该函数中,定义了一个特征关键词列表`feature_words`,然后将文本数据转换为集合形式,并与特征关键词集合进行交集运算。如果存在交集,则将得分添加到`score`列表中。如果特征关键词集合中存在`mysql`关键词,则将另一个得分值添加到`score`列表中。最后将得分列表转换为字符串形式并返回。
6. 将`data_log_jieba_message`列表中的每个分词结果通过`map`函数映射为得分,将结果存储在`id_score`列中。
7. 返回处理后的数据表格`data_log`。
import os import random import numpy as np import cv2 import keras from create_unet import create_model img_path = 'data_enh/img' mask_path = 'data_enh/mask' # 训练集与测试集的切分 img_files = np.array(os.listdir(img_path)) data_num = len(img_files) train_num = int(data_num * 0.8) train_ind = random.sample(range(data_num), train_num) test_ind = list(set(range(data_num)) - set(train_ind)) train_ind = np.array(train_ind) test_ind = np.array(test_ind) train_img = img_files[train_ind] # 训练的数据 test_img = img_files[test_ind] # 测试的数据 def get_mask_name(img_name): mask = [] for i in img_name: mask_name = i.replace('.jpg', '.png') mask.append(mask_name) return np.array(mask) train_mask = get_mask_name(train_img) test_msak = get_mask_name(test_img) def generator(img, mask, batch_size): num = len(img) while True: IMG = [] MASK = [] for i in range(batch_size): index = np.random.choice(num) img_name = img[index] mask_name = mask[index] img_temp = os.path.join(img_path, img_name) mask_temp = os.path.join(mask_path, mask_name) temp_img = cv2.imread(img_temp) temp_mask = cv2.imread(mask_temp, 0)/255 temp_mask = np.reshape(temp_mask, [256, 256, 1]) IMG.append(temp_img) MASK.append(temp_mask) IMG = np.array(IMG) MASK = np.array(MASK) yield IMG, MASK # train_data = generator(train_img, train_mask, 32) # temp_data = train_data.__next__() # 计算dice系数 def dice_coef(y_true, y_pred): y_true_f = keras.backend.flatten(y_true) y_pred_f = keras.backend.flatten(y_pred) intersection = keras.backend.sum(y_true_f * y_pred_f) area_true = keras.backend.sum(y_true_f * y_true_f) area_pred = keras.backend.sum(y_pred_f * y_pred_f) dice = (2 * intersection + 1)/(area_true + area_pred + 1) return dice # 自定义损失函数,dice_loss def dice_coef_loss(y_true, y_pred): return 1 - dice_coef(y_true, y_pred) # 模型的创建 model = create_model() # 模型的编译 model.compile(optimizer='Adam', loss=dice_coef_loss, metrics=[dice_coef]) # 模型的训练 history = model.fit_generator(generator(train_img, train_mask, 4), steps_per_epoch=100, epochs=10, validation_data=generator(test_img, test_msak, 4), validation_steps=4 ) # 模型的保存 model.save('unet_model.h5') # 模型的读取 model = keras.models.load_model('unet_model.h5', custom_objects={'dice_coef_loss': dice_coef_loss, 'dice_coef': dice_coef}) # 获取测试数据 test_generator = generator(test_img, test_msak, 32) img, mask = test_generator.__next__() # 模型的测试 model.evaluate(img, mask) # [0.11458712816238403, 0.885412871837616] 94%
上面这段代码是在导入一些库。它导入了 OS 库,Random 库,NumPy 库,CV2 库,Keras 库,以及一个叫做 Create_unet 的自定义模块。它还定义了两个字符串变量:img_path 和 mask_path,分别存储了图像数据和掩码数据的路径。
阅读全文