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.pswp.cn/diannao/44045.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/44045.shtml
英文地址,請注明出處:http://en.pswp.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;百家姓_詩詞_百度漢…