如何批量处理无空格天体名称以适配astroquery Simbad.query_object?
批量处理无空格天体名称适配Simbad查询
针对批量无空格天体名称无法正常查询的问题,最直接的解决方式是用正则表达式批量插入空格,匹配这类天体名称「字母前缀+数字+字母后缀」的通用格式,自动拆分出符合要求的空格。
具体实现代码
import re from astroquery.simbad import Simbad def format_object_name(name): # 匹配「字母+数字+可选字母后缀」的模式,在字母与数字、数字与字母间插入空格 # 示例:W3OH → W 3 OH,NGC1234 → NGC 1234,M82 → M 82 formatted = re.sub(r'([A-Za-z]+)(\d+)([A-Za-z]+)?', r'\1 \2 \3', name) # 清理末尾可能出现的多余空格(比如无后缀的名称) return formatted.strip() # 你的无空格天体名称列表 unformatted_names = ["W3OH", "M82", "NGC1234", "IC434"] # 批量格式化名称 formatted_names = [format_object_name(name) for name in unformatted_names] # 批量查询示例 for name in formatted_names: try: result = Simbad.query_object(name) if result is not None: print(f"查询成功:{name}") print(result) else: print(f"无匹配结果:{name}") except Exception as e: print(f"查询失败:{name},错误信息:{str(e)}")
补充说明
- 正则表达式
([A-Za-z]+)(\d+)([A-Za-z]+)?覆盖了绝大多数常见天体命名格式,既能处理带后缀的名称(如W3OH),也能处理纯前缀+数字的名称(如M82)。 - 如果遇到特殊格式的名称(比如带连字符、特殊符号的),格式化后仍可能查询失败,建议把这类异常名称单独收集,后续手动调整即可。
内容的提问来源于stack exchange,提问作者HP AS
相关产品推荐
相关产品推荐

