Linux | 安装lb-toolkits 1.2.4库

Linux | 安装 lb-toolkits

最近又需要下载葵花的数据,之前分享过一次代码。今天发现之前的环境不小心被我删了,而运行相关的代码需要安装lb-toolkits这个库,今天正好记录了一下安装lb-toolkits的过程。

这里安装的版本是1.2.4,别问为什么是这个版本,因为只安到了这个版本才成功。

  • https://pypi.org/project/lb-toolkits/1.2.4/#files

本来是直接通过

pip install lb-toolkits==1.2.4

命令直接安装的,但是发现一直报错。

安装过程

下面记录一下成功安装的过程

安装python版本

这里先安装python=3.11的版本

 conda create -n py311  python=3.11 

安装相关依赖

由于lb-toolkits需要相关的依赖环境

库名	版本	库名	版本	库名	版本
numpy	1.2.0	pyhdf	0.10.0	h5py	1.0.0
netcdf4	1.0.0	tqdm	4.0.0	gdal	2.0.0
pillow	7.0.0	paramiko	2.10.0	cdsapi	0.5.0

所以在安装之前先安装他的依赖

conda install conda-forge::pyhdf h5py netcdf4 tqdm gdal pillow paramiko cdsapi

安装lb-toolkits 1.2.4

依赖环境安装完了,然后再使用pip 安装具体的版本

pip install lb-toolkits==1.2.4

在这里插入图片描述
安装成功了

测试脚本

运行相关脚本前需要再装一个库

conda install bs4

运行相关脚本,下载2023年8月和9月的数据:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Apr  6 14:25:52 2023@author: jianpu"""
import os
import sys
import datetime
import timefrom lb_toolkits.tools import ftppro
#from lb_toolkits.tools import writejsonclass downloadH8(object):def __init__(self, username, password):self.ftp = ftppro(FTPHOST, username, password)def search_ahi8_l1_netcdf(self, starttime, endtime=None, pattern=None, skip=False):'''下载葵花8号卫星L1 NetCDF数据文件Parameters----------starttime : datetime下载所需数据的起始时间endtime : datetime下载所需数据的起始时间pattern: list, optional模糊匹配参数Returns-------list下载的文件列表'''if endtime is None :endtime = starttimedownfilelist = []nowdate = starttimewhile nowdate <= endtime :# 拼接H8 ftp 目录sourceRoot = os.path.join('/jma/netcdf', nowdate.strftime("%Y%m"), nowdate.strftime("%d"))sourceRoot = sourceRoot.replace('\\','/')# 获取文件列表filelist = self.GetFileList(starttime, endtime, sourceRoot, pattern)# filelist = [f for f in filelist if f.startswith('NC_H08_') and f.endswith('.06001_06001.nc')]if len(filelist) == 0 :nowdate += datetime.timedelta(days=1)print('未匹配当前时间【%s】的文件' %(nowdate.strftime('%Y-%m-%d')))continuenowdate += datetime.timedelta(days=1)downfilelist.extend(filelist)return downfilelistdef GetFileList(self, starttime, endtime, srcpath, pattern=None):''' 根据输入时间,匹配获取H8 L1数据文件名  '''downfiles = []srcpath = srcpath.replace('\\', '/')filelist = self.ftp.listdir(srcpath)filelist.sort()for filename in filelist :namelist = filename.split('_')nowdate = datetime.datetime.strptime('%s %s' %(namelist[2], namelist[3]), '%Y%m%d %H%M')if (nowdate < starttime) | (nowdate > endtime) :continuedownflag = True# 根据传入的匹配参数,匹配文件名中是否包含相应的字符串if pattern is not None :if isinstance(pattern, list) :for item in pattern :if item in filename :downflag = True# breakelse:downflag = Falsebreakelif isinstance(pattern, str) :if pattern in filename :downflag = Trueelse:downflag = Falseif downflag :srcname = os.path.join(srcpath, filename)srcname = srcname.replace('\\','/')downfiles.append(srcname)return downfilesdef download(self, outdir, srcfile, blocksize=1*1024, skip=False):"""通过ftp接口下载H8 L1数据文件"""if not os.path.exists(outdir):os.makedirs(outdir)print('成功创建路径:%s' %(outdir))if isinstance(srcfile, list) :count = len(srcfile)for srcname in srcfile:count -= 1self._download(outdir, srcname, blocksize=blocksize, skip=skip, count=count+1)elif isinstance(srcfile, str) :self._download(outdir, srcfile, blocksize=blocksize, skip=skip)def _download(self, outdir, srcname, blocksize=1*1024, skip=False, count=1):print('='*100)basename = os.path.basename(srcname)dstname = os.path.join(outdir, basename)if skip :return srcnameif os.path.isfile(dstname) :print('文件已存在,跳过下载>>【%s】' %(dstname))return srcnamestime = time.time()print(datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'),'开始下载文件【%d】: %s'%(count, srcname))if self.ftp.downloadFile(srcname, outdir, blocksize=blocksize):print(datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'),'成功下载文件【%s】:%s' %(count, dstname))else:print(datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'),'下载文件失败【%s】:%s' %(count, dstname))etime = time.time()print('下载文件共用%.2f秒' %(etime - stime))return srcnamedef check_data_completeness(file_list, start_time, end_time):expected_num_files = (end_time - start_time).days *48 + 48  # 48 show 30min/time; 144 show 10min/timeactual_num_files = len(file_list)if actual_num_files == expected_num_files:print("已经下载了全部数据。")else:print("有 %d 个数据文件缺失。" % (expected_num_files - actual_num_files))expected_file_names = []actual_file_names = []for i in range(expected_num_files):file_time = start_time + datetime.timedelta(minutes=i * 30)file_name = "NC_H08_%s_R21_FLDK.06001_06001.nc" % (file_time.strftime("%Y%m%d_%H%M"))expected_file_names.append(file_name)for file_path in file_list:file_name = os.path.basename(file_path)actual_file_names.append(file_name)missing_file_names = set(expected_file_names) - set(actual_file_names)for missing_file_name in missing_file_names:print("缺失文件:%s" % missing_file_name)FTPHOST='ftp.ptree.jaxa.jp'# create an instance of the downloadH8 class
h8_downloader = downloadH8('xxx', 'xxx')
## 2016 1440\0240   loss
# search for H8 files for a specific date
start_time = datetime.datetime(2023, 8, 27)
end_time = datetime.datetime(2023, 9,7,23, 59, 59)
file_list = h8_downloader.search_ahi8_l1_netcdf(start_time, end_time,pattern=['R21','02401_02401'])# 选取每30分钟的数据文件名
selected_files = []
for file in file_list:if file.endswith(".nc"):if file[40:42] in ["00", "30"]:selected_files.append(file)# 打印选取的文件名
print(selected_files)check_data_completeness(selected_files,start_time, end_time)from tqdm import tqdm for file in tqdm(selected_files):h8_downloader.download('/DatadiskExt/down_h8_code/', file)

使用nohup将脚本提交到后台,

nohup python down_kuihua8_30min.py  > down_H8-2023-08_09-15.log 2>&1 & 

并使用tail命令查看相关下载的日志:

 tail -f down_H8-2023-08_09-15.log 

可以发现数据正在后台下载

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows USB 设备驱动开发-发送MDL和错误恢复

USB 驱动程序可以在堆栈中使用链接式 MDL 功能发送数据&#xff0c;并且USB驱动的客户端可以将传输缓冲区作为 MDL 结构链发送。 大多数 USB 主机控制器要求传输缓冲区几乎是连续的。 几乎连续意味着缓冲区可以开始和结束页中的任意位置&#xff0c;但缓冲区的其余部分必须在页…

53-4 内网代理6 - frp搭建三层代理

前提:53-3 内网代理5 - frp搭建二级代理-CSDN博客 三级网络代理 在办公区入侵后,发现需要进一步渗透核心区网络(192.168.60.0/24),并登录域控制器的远程桌面。使用FRP在EDMZ区、办公区与核心区之间建立三级网络的SOCKS5代理,以便访问核心区的域控制器。 VPS上的FRP服…

海豚调度器(DolphinScheduler)修改时区为东八区

海豚调度器设置了定时&#xff0c;执行的时间和设置时间不同&#xff0c;后来排查发现是时区问题。可以用下面方法和步骤来修改&#xff1a; 修改DolphinScheduler服务器时区 登录服务器&#xff1a;首先&#xff0c;通过SSH或其他方式登录到运行DolphinScheduler服务的服务器…

压缩感知3——重构算法正交匹配追踪算法

算法流程 问题的实质是&#xff1a;AX Y 求解&#xff08;A是M维&#xff0c;Y是N维且N>>M并且稀疏度K<M&#xff09;明显X有无穷多解&#xff0c;重构过程是M次采样得到的采样值升维的过程。OMP算法的具体步骤&#xff1a;(1)用X表示信号&#xff0c;初始化残差e0 …

计算给定数字的阶乘

1 问题 计算给定数字的阶乘. 2 方法 使用while循环。使用for循环。使用函数。 通过实验、实践等证明提出的方法是有效的&#xff0c;是能够解决开头提出的问题。 代码清单 1 使用while循环numberint(input(请输入一个数字:))factorial1i1while i<number: factorialfactor…

【论文速读】| JADE:用于大语言模型的基于语言学的安全评估平台

本次分享论文&#xff1a;JADE : A Linguistics-based Safety Evaluation Platform for Large Language Models 基本信息 原文作者&#xff1a;Mi Zhang, Xudong Pan, Min Yang 作者单位&#xff1a;Whitzard-AI, System Software and Security Lab Fudan University 关键…

AWS Glue 与 Amazon Redshift 的安全通信配置

1. 引言 在 AWS 环境中,确保服务间的安全通信至关重要。本文将探讨 AWS Glue 与 Amazon Redshift 之间的安全通信配置,特别是为什么需要特定的安全组设置,以及如何正确实施这些配置。 2. 背景 AWS Glue:全托管的 ETL(提取、转换、加载)服务Amazon Redshift:快速、完全…

嵌入式底层开发 入门学习路线

入门嵌入式底层开发的学习路线可以分为几个关键阶段&#xff0c;下面是一个较为系统的学习路径&#xff0c;它涵盖了从基础知识到实际项目应用的全过程。 1. 基础知识 计算机科学基础&#xff1a;理解数据结构、算法、操作系统等基本概念。电子和电路理论&#xff1a;学习数字…

『大模型笔记』GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布

GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 文章目录 一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布1. 评估和结果2. 研究见解和未来方向二. 参考文献一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 下载 GraphRAG今年早些时候,我们介绍…

倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分

CommunityOverCode 是 Apache 软件基金会&#xff08;ASF&#xff09;的官方全球系列大会&#xff0c;其前身为 ApacheCon。自 1998 年以来&#xff0c;在 ASF 成立之前&#xff0c;ApacheCon 已经吸引了各个层次的参与者&#xff0c;在 300 多个 Apache 项目及其不同的社区中探…

【Unix】SunOS/Oracle Solaris系统介绍

一.SunOS系统介绍 SunOS 是由 Sun Microsystems 开发的 Unix 操作系统。它最初是为 Sun 的 SPARC 架构计算机设计的&#xff0c;后来也支持了 Intel x86 架构。SunOS 是基于 UNIX System V 4.1 版本&#xff0c;并且随着时间的发展&#xff0c;SunOS 经历了多个版本迭代&#…

百度文心4.0 Turbo开放,领跑国内AI大模型赛道!

百度文心4.0 Turbo开放&#xff0c;领跑国内AI大模型赛道&#xff01; 前言 文心一言大模型 就在7月5日&#xff0c;在2024世界人工智能大会 (WAIC) 上&#xff0c;百度副总裁谢广军宣布文心大模型4.0 Turbo正式向企业客户全面开放&#xff01;这一举动直接引发了业界的关注。那…

springboot中@bean注解的创建和使用

bean的创建顺序 在Spring Boot中&#xff0c;当一个配置类&#xff08;使用Configuration注解的类&#xff09;中定义了多个bean时&#xff0c;这些bean的创建顺序并不完全由它们在类中的声明顺序决定。Spring框架在创建和管理bean时&#xff0c;遵循了复杂的依赖注入和生命周…

qt connect 函数详解

在 Qt 框架中&#xff0c;connect 函数是一个非常重要的机制&#xff0c;用于在信号&#xff08;signal&#xff09;和槽&#xff08;slot&#xff09;之间建立连接。信号和槽是 Qt 中用于对象间通信的一种机制。当某个特定事件发生时&#xff0c;一个对象可以发射&#xff08;…

短链接day3

短链接分组模块 新增短链接分组 在新增之前&#xff0c;需要判断gid是否是唯一的。 //检查gid是否已存在&#xff0c;保证gid唯一public boolean hasGid(String gid){LambdaQueryWrapper<GroupDO> queryWrapper Wrappers.lambdaQuery(GroupDO.class).eq(GroupDO::getG…

在Windows中使用开源高性能编辑器Zed(持续更新)

简介 “Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter. It’s also open source.” “Zed是一款高性能的支持多人协作的代码编辑器&#xff0c;由Atom和Tree-sitter的创建者开发。它也是开源的。” Zed主打“高性能”&…

为什么选择开放式耳机?悠律凝声环开放式耳机体验

开放式耳机相对于其他传统耳机优势有以下几点&#xff1a; 配戴舒适性更好&#xff1a;由于开放式耳机的背面是开放的&#xff0c;空气可以自由流动&#xff0c;减少了耳朵的闷热感。长时间佩戴时更加舒适。&#xff0c;而传统入耳式耳机一般都是塞入耳道&#xff0c;久戴会胀…

Java中的 this 关键字是什么意思? this() 又是什么?

目录 问题问题一&#xff1a;什么是this关键字?问题二&#xff1a;什么是this()&#xff1f; 问题 问题一&#xff1a;什么是this关键字? 定义&#xff1a;this 代表当前对象。这个定义比较抽象&#xff0c;举例来回答。 思考一个问题&#xff1a;如果没有 this 会怎样&…

鸿蒙开发学习笔记2

一、class 类 类是用于 创建对象模版。同时类声明也会引入一个 新类型&#xff0c;可定义其 实例属性、方法 和 构造函数。 // 类名 首字母大写&#xff08;规范&#xff09; class 类名 {// 1、实例属性&#xff08;字段&#xff09;// 2、构造函数// 3、方法 }1、属性&…

IO练习网络爬虫获取

题目&#xff1a; 具体文字内容如下&#xff1a; 练习&#xff1a;制造假数据 需求&#xff1a;制造假数据是开发中的一项重要能力&#xff0c;从各个网站爬取数据是其中的一种方法。 获取姓氏示例及链接&#xff1a; 赵钱孙李 周吴郑王 链接&#xff1a;百家姓_诗词_百度汉…