Python (discord.py): 循环中特定单词后的新行(输入)

Python (discord.py): New line(enter) after specific words in a loop

我目前正在开发航空天气 Discord 机器人,用户可以在其中请求机场的具体天气。因此,例如,当您输入:!metar KJFK 它应该 return METAR(气象机场报告)和 TAF(终端机场预报)。 此刻,我让它工作了,但它 return 是单行的。这是我进入阿姆斯特丹-史基浦国际民航组织站时得到的结果:

输入:!METAR EHAM 输出:

METAR: EHAM 071755Z 27008KT 230V300 9999 FEW030 19/11 Q1016 NOSIG
TAF: TAF EHAM 071707Z 0718/0824 26010KT 9999 FEW030 BECMG 0719/0722 19003KT BECMG 0812/0815 27008KT PROB30 TEMPO 0812/0816 7000 -SHRA FEW025TCU BECMG 0821/0824 23003KT

应该如何:

EHAM 071755Z 27008KT 230V300 9999 FEW030 19/11 Q1016 NOSIG

TAF EHAM 071707Z 0718/0824 26010KT 9999 FEW030
  BECMG 0719/0722 19003KT
  BECMG 0812/0815 27008KT
  PROB30
  TEMPO 0812/0816 7000 -SHRA FEW025TCU
  BECMG 0821/0824 23003KT

所以在每个 'BECMG' 和 'TEMPO' 之后它从一个新行开始。我已经尝试了几个小时来解决这个问题。我还在学习所以我希望有人能够帮助我解决这个问题。

我目前的代码:

@client.command(aliases=['METAR', 'TAF', 'taf'])
async def metar(ctx, *, metar_station):
    #METAR
    url_metar = 'https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.csv'
    response = urllib.request.urlopen(url_metar)
    lines = [l.decode('utf-8') for l in response.readlines()]
    cr = csv.reader(lines)
    for row in cr:
        if row[0].startswith(metar_station):
            result_metar = row[0]

    #TAF
    url_taf = 'https://www.aviationweather.gov/adds/dataserver_current/current/tafs.cache.csv'
    response_taf = urllib.request.urlopen(url_taf)
    lines_taf = [l.decode('utf-8') for l in response_taf.readlines()]
    cr_taf = csv.reader(lines_taf)

    for row_taf in cr_taf:
        if row_taf[0].startswith(str('TAF ') + metar_station):
            result_taf = row_taf[0]


            
    await ctx.send(f'**METAR**: {result_metar}\n**TAF**: {result_taf}')

我真的希望有人能帮我解决这个问题。我已经为此工作了几个小时,但我真的被困在这里了。

非常感谢您的帮助和支持。

祝一切顺利!

有很多方法可以做到这一点,但为了方便和更好地理解,我使用 str.replace() 来替换特定单词,在它们之前添加“\n”。

result_taf = result_taf.replace("BECMG","\nBECMG").replace("TEMPO","\nTEMPO").replace("PROB30","\nPROB30")

所以最终代码将是:(little edited)

@client.command(aliases=['METAR', 'TAF', 'taf'])
async def metar(ctx, *, metar_station):
    #METAR
    response = urlopen('https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.csv')
    lines = [l.decode('utf-8') for l in response.readlines()]
    cr = csv.reader(lines)
    result_metar = [row[0] for row in cr if row[0].startswith(metar_station)][0]

    #TAF
    response_taf = urlopen('https://www.aviationweather.gov/adds/dataserver_current/current/tafs.cache.csv')
    lines_taf = [l.decode('utf-8') for l in response_taf.readlines()]
    cr_taf = csv.reader(lines_taf)

    result_taf = [row[0] for row in cr_taf if row[0].startswith(f"TAF {metar_station}")][0]
    result_taf = result_taf.replace("BECMG","\nBECMG").replace("TEMPO","\nTEMPO").replace("PROB30","\nPROB30")
    await ctx.send(f'**METAR**: {result_metar}\n**TAF**: {result_taf}')   

输出:

EHAM 080255Z 09001KT CAVOK 13/11 Q1018 NOSIG
TAF EHAM 072308Z 0800/0906 VRB03KT 9999 FEW030
BECMG 0806/0809 24007KT
PROB30
TEMPO 0812/0816 7000 -SHRA FEW025TCU
BECMG 0818/0821 VRB03KT PROB40 0822/0905 4500 BR