找回密码
 立即注册
搜索
查看: 374|回复: 0

[潮流数码] 一个无聊的Python小程序,用于搬运NMC台风快讯

[复制链接]

13

主题

694

回帖

1458

积分

强热带风暴

积分
1458
发表于 2024-7-24 03:15 | 显示全部楼层 |阅读模式
本帖最后由 zst20020306 于 2024-7-24 04:00 编辑

这个程序可以用来方便地将NMC的台风快讯以尽可能还原的格式搬运到论坛内。使用方式如下:

  • 在程序目录下面建立一个名为 input.txt 的文本文档。
  • 全选NMC官网上的台风快讯并复制
  • 将复制的内容粘贴至 input.txt 文件内,替换原有的内容,然后保存
  • 运行程序
  • 打开程序目录下面的 output.txt 文件,复制里面的全部内容
  • 打开论坛,将内容粘贴至文本框内即可


效果图如下:

程序源代码如下:
  1. import re
  2. import os

  3. def extract_numbers(s):
  4.     return [int(num) for num in re.findall(r'\d+', s)]

  5. def find_positions(string, target):
  6.     positions = []
  7.     for i in range(len(string)):
  8.         if string[i] == target:
  9.             positions.append(i)
  10.     return positions

  11. file_path = os.path.dirname(__file__)
  12. path = file_path+"\input.txt"

  13. with open(path,"r",encoding='utf-8') as file:
  14.     data = file.read()

  15. nums = extract_numbers(data)
  16. nums = nums[0:6]

  17. output1 = "[align=center][b][color=Red][size=6]台风快讯[/size][/color][/b]\n\n[size=3][b]%d年总%d期[/b]\n\n[b]中国气象局中央气象台                   %02d月%02d日%02d时%02d分[/b][/align][/size]\n" %(nums[0],nums[1],nums[2],nums[3],nums[4],nums[5])
  18. xiegangNpos = find_positions(data, '\n')
  19. input2 = data[xiegangNpos[2]:]
  20. print(input2)

  21. leng = len(input2)
  22. print(leng)
  23. output2 = input2
  24. inserted_num = 0
  25. redflag = 0

  26. for i in range(leng):
  27.     if input2[i] == '\n':
  28.         i_start = i
  29.         if redflag == 1:
  30.             redflag = 0
  31.             output2 = output2[:i_start+inserted_num] + "[/color][/b]" + output2[i_start+inserted_num:]
  32.             inserted_num = inserted_num + 12           
  33.     if input2[i] == ':':
  34.         i_end = i
  35.         output2 = output2[:i_start+inserted_num+1] + "[b]" + output2[i_start+inserted_num+1:]
  36.         inserted_num = inserted_num + 3
  37.         if input2[i-3:i-1] == '心位' or input2[i-3:i-1] == '度等' or input2[i-3:i-1] == '大风':
  38.             output2 = output2[:i_end+inserted_num+1] + "[color=Red]" + output2[i_end+inserted_num+1:]
  39.             inserted_num = inserted_num + 11
  40.             redflag = 1
  41.         else:
  42.             output2 = output2[:i_end+inserted_num+1] + "[/b]" + output2[i_end+inserted_num+1:]
  43.             inserted_num = inserted_num + 4

  44.     if input2[i] == '十' and input2[i+1] == '级':
  45.         output2 = output2[:i_start+inserted_num+1] + "                        " + output2[i_start+inserted_num+1:]   
  46.         inserted_num = inserted_num + 24
  47.     if input2[i] == '十' and input2[i+1] == '二' and input2[i+2] == '级':
  48.         output2 = output2[:i_start+inserted_num+1] + "                        " + output2[i_start+inserted_num+1:]   
  49.         inserted_num = inserted_num + 24

  50. output=output1+output2[1:]
  51. print(output)

  52. file = open(file_path+"\output.txt", "w")
  53. file.write(output)
  54. file.close()
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1威望 +5 贡献值 +1 收起 理由
理可的呆萌呆毛 + 5 + 1 實用貼

查看全部评分

下面的气候数据还没有被猜出!点击下方 ↓ 黑色链接参与。(Valid:2024.8.18)
https://www.tyboard.net/forum.ph ... d=415&pid=36074
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TY_Board论坛

GMT+8, 2024-9-17 04:22 , Processed in 0.064792 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表