import re def getuniversity(data): rawdata = [re.findall('(.*?(?:大学|学院))', i) for i in data] return list(set([i[0] for i in rawdata if len(i) != 0])) data['University_list'] = data['Organ_list'].apply(getuniversity)什么意思
时间: 2023-11-30 18:02:08 浏览: 60
这段代码的作用是从给定的数据中提取出大学或学院的名称,并将结果存储在一个名为`University_list`的列中。
首先,导入了`re`模块,用于进行正则表达式匹配。接下来,定义了一个名为`getuniversity`的函数,该函数接受一个参数`data`。
在函数内部,首先对`data`中的每条数据应用正则表达式匹配。使用`re.findall`函数,通过正则表达式`(.*?(?:大学|学院))`来提取出满足条件的大学或学院名称。这个正则表达式表示匹配以"大学"或"学院"结尾的字符串,并尽可能少地匹配字符。
接下来,使用列表推导式对提取到的结果进行处理。首先判断每个结果列表`i`的长度是否为0,如果不为0,则说明匹配到了大学或学院的名称。然后,使用`set`函数去除重复的名称,并将结果转换为列表。
最后,通过调用DataFrame的`apply`方法,将`getuniversity`函数应用于`data['Organ_list']`这一列,并将结果存储在名为`University_list`的新列中。
总结起来,这段代码的目的是从给定的数据中提取出大学或学院的名称,并将结果保存在一个新的列中。
相关问题
Python cvat的kitti raw data格式里的3D点云单个tracklet_labels.xml文件和打开对应frame_list.txt文件对应点云列表解析为paddle3D训练格式多个txt的脚本
以下是一个可以将CVAT KITTI Raw Data格式中的单个tracklet_labels.xml文件和对应的frame_list.txt文件解析为Paddle3D训练格式多个txt的Python脚本:
``` python
import os
import xml.etree.ElementTree as ET
# 读取frame_list.txt文件,获取所有的点云文件名
def read_frame_list_txt(frame_list_txt_path):
with open(frame_list_txt_path, 'r') as f:
lines = f.readlines()
point_cloud_files = [line.strip() for line in lines]
return point_cloud_files
# 解析单个tracklet_labels.xml文件,获取所有的bounding box信息
def parse_tracklet_labels_xml(tracklet_labels_xml_path):
tree = ET.parse(tracklet_labels_xml_path)
root = tree.getroot()
bboxes = []
for bbox_node in root.findall('object/bndbox'):
bbox = {
'xmin': int(bbox_node.find('xmin').text),
'ymin': int(bbox_node.find('ymin').text),
'xmax': int(bbox_node.find('xmax').text),
'ymax': int(bbox_node.find('ymax').text),
'label': bbox_node.find('name').text
}
bboxes.append(bbox)
return bboxes
# 将bounding box信息写入对应的txt文件中
def write_bboxes_to_txt(point_cloud_file, bboxes, output_dir):
basename = os.path.splitext(os.path.basename(point_cloud_file))[0]
output_file_path = os.path.join(output_dir, basename+'.txt')
with open(output_file_path, 'w') as f:
for bbox in bboxes:
label = bbox['label']
xmin = bbox['xmin']
ymin = bbox['ymin']
xmax = bbox['xmax']
ymax = bbox['ymax']
f.write(f'{label} {xmin} {ymin} {xmax} {ymax}\n')
# 主函数
def main(tracklet_labels_xml_path, frame_list_txt_path, point_cloud_dir, output_dir):
# 读取frame_list.txt文件,获取所有的点云文件名
point_cloud_files = read_frame_list_txt(frame_list_txt_path)
# 解析单个tracklet_labels.xml文件,获取所有的bounding box信息
bboxes = parse_tracklet_labels_xml(tracklet_labels_xml_path)
# 遍历所有的点云文件,将bounding box信息写入对应的txt文件中
for point_cloud_file in point_cloud_files:
point_cloud_file_path = os.path.join(point_cloud_dir, point_cloud_file)
write_bboxes_to_txt(point_cloud_file_path, bboxes, output_dir)
if __name__ == '__main__':
tracklet_labels_xml_path = '/path/to/tracklet_labels.xml'
frame_list_txt_path = '/path/to/frame_list.txt'
point_cloud_dir = '/path/to/point_cloud_dir'
output_dir = '/path/to/output_dir'
main(tracklet_labels_xml_path, frame_list_txt_path, point_cloud_dir, output_dir)
```
使用时,需要将上面的代码保存为一个Python脚本,然后设置好以下几个参数:
- tracklet_labels_xml_path:单个tracklet_labels.xml文件的路径。
- frame_list_txt_path:对应的frame_list.txt文件的路径。
- point_cloud_dir:包含所有点云文件的文件夹路径。
- output_dir:保存Paddle3D训练格式多个txt文件的文件夹路径。
然后运行脚本即可。脚本会将单个tracklet_labels.xml文件中的所有bounding box信息写入对应的txt文件中,每个txt文件对应一个点云文件。
阅读全文