Python 从命令提示中删除信息
我有一个代码,它使用for循环从某个表中提取光量值(在本例中称为Python 从命令提示中删除信息,python,for-loop,Python,For Loop,我有一个代码,它使用for循环从某个表中提取光量值(在本例中称为phot\u bp\u rp\u over\u factor)(bp) 我的代码: coord =SkyCoord(table["ra"], table["dec"], frame="icrs", unit="deg") for i in coord: r= Gaia.query_object_async(coordinate=i, width
phot\u bp\u rp\u over\u factor
)(bp)
我的代码:
coord =SkyCoord(table["ra"], table["dec"], frame="icrs", unit="deg")
for i in coord:
r= Gaia.query_object_async(coordinate=i, width = u.Quantity(0.0005, u.deg), height=u.Quantity(0.0005, u.deg))
bp=[r["phot_bp_rp_excess_factor"]]
print (bp[-1])
输出/命令提示显示:
INFO: Query finished. [astroquery.utils.tap.core]
phot_bp_rp_excess_factor
------------------------
11.4
INFO: Query finished. [astroquery.utils.tap.core]
phot_bp_rp_excess_factor
------------------------
14.4
...
但是,我只需要数字,在本例中是11.4和14.4。我不希望每次循环时它都说“信息:查询完成。[astroquery.utils.tap.core]”phot\u bp\u rp\u oversex\u factor,因为我正在尝试创建一个光量值的列表/数组。有人知道怎么做吗
编辑:我不知道这些信息是否与解决问题相关,但我使用的是Astropy库,Skycoord来自该库。如果您想隐藏信息消息,可以尝试:
import logging
logger = logging.getLogger()
logger.setLevel(logging.CRITICAL)
基于的,我的最佳选择是它只是一个日志记录程序
您可以使用以下命令来降低特定记录器的详细程度:
import logging
logger = logging.getLogger("astroquery")
logger.setLevel(logging.INFO)
但总的来说,最好不要在意日志消息,将数据收集/打印阶段分开:
coord = SkyCoord(table["ra"], table["dec"], frame="icrs", unit="deg")
data = []
for i in coord:
r = Gaia.query_object_async(
coordinate=i,
width=u.Quantity(0.0005, u.deg),
height=u.Quantity(0.0005, u.deg),
)
bp = r["phot_bp_rp_excess_factor"]
data.append((i, bp))
for i, bp in data:
print(i, bp) # Or whichever formatting you'd like
此外,日志数据通常会进入标准错误流,而不是标准输出流,因此,如果您是从命令行运行程序,您只需重定向到一个文件,并仅获取print()
输出:
python myscript.py > output.txt
我尝试了分离“收集/打印阶段”,在“打印阶段”,我得到的输出之一是phot\u bp\u rp\u超额系数--11.469192
。因此,我仍然得到了phot\u bp\u rp\u over\u factor
文本,而不仅仅是数字11.469192
。我想也许我应该创建一个熊猫数据框来存储数字。当我使用df=pd.DataFrame({'BpRp':bp})
然后是df.to_csv('cerca.csv',index=False,encoding='utf-8')
时,它只保存了我循环的最后一个结果。你知道为什么会这样吗?或者其他可能的解决方案?您需要弄清楚bp
的类型以及如何从中获取数据。请尝试打印(键入(bp))
…谢谢,终于成功了!