oafuncs 0.0.75__py2.py3-none-any.whl → 0.0.77__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- oafuncs/oa_cmap.py +73 -24
- oafuncs/oa_down/User_Agent-list.txt +9521 -0
- oafuncs/oa_down/__init__.py +2 -3
- oafuncs/oa_down/test.py +24 -1
- oafuncs/oa_file.py +40 -4
- oafuncs/oa_nc.py +98 -36
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/METADATA +9 -6
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/RECORD +11 -11
- oafuncs/oa_down/refs_pdf.py +0 -338
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/LICENSE.txt +0 -0
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/WHEEL +0 -0
- {oafuncs-0.0.75.dist-info → oafuncs-0.0.77.dist-info}/top_level.txt +0 -0
oafuncs/oa_down/__init__.py
CHANGED
@@ -4,8 +4,8 @@
|
|
4
4
|
Author: Liu Kun && 16031215@qq.com
|
5
5
|
Date: 2024-09-17 16:09:20
|
6
6
|
LastEditors: Liu Kun && 16031215@qq.com
|
7
|
-
LastEditTime: 2024-
|
8
|
-
FilePath: \\Python\\My_Funcs\\OAFuncs\\
|
7
|
+
LastEditTime: 2024-12-01 19:49:40
|
8
|
+
FilePath: \\Python\\My_Funcs\\OAFuncs\\oafuncs\\oa_down\\__init__.py
|
9
9
|
Description:
|
10
10
|
EditPlatform: vscode
|
11
11
|
ComputerInfo: XPS 15 9510
|
@@ -18,4 +18,3 @@ Python Version: 3.11
|
|
18
18
|
|
19
19
|
from .hycom_3hourly import *
|
20
20
|
from .literature import *
|
21
|
-
from .refs_pdf import * # 在2024/12/31之后删除此脚本
|
oafuncs/oa_down/test.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
Author: Liu Kun && 16031215@qq.com
|
5
5
|
Date: 2024-12-01 19:32:25
|
6
6
|
LastEditors: Liu Kun && 16031215@qq.com
|
7
|
-
LastEditTime: 2024-12-01 19:
|
7
|
+
LastEditTime: 2024-12-01 19:50:32
|
8
8
|
FilePath: \\Python\\My_Funcs\\OAFuncs\\oafuncs\\oa_down\\test.py
|
9
9
|
Description:
|
10
10
|
EditPlatform: vscode
|
@@ -16,6 +16,24 @@ Python Version: 3.12
|
|
16
16
|
import os
|
17
17
|
import random
|
18
18
|
|
19
|
+
txtfile = r'E:\Code\Python\My_Funcs\OAFuncs\oafuncs\oa_down\User_Agent-list.txt'
|
20
|
+
|
21
|
+
with open(txtfile, 'r') as f:
|
22
|
+
lines = f.readlines()
|
23
|
+
# 去掉换行符和空行
|
24
|
+
lines = [line.strip() for line in lines if line.strip()]
|
25
|
+
new_line = []
|
26
|
+
for i in range(len(lines)):
|
27
|
+
if '/' in lines[i]:
|
28
|
+
new_line.append(lines[i])
|
29
|
+
else:
|
30
|
+
print(lines[i])
|
31
|
+
|
32
|
+
newtxtfile = r'E:\Code\Python\My_Funcs\OAFuncs\oafuncs\oa_down\ua_list_new.txt'
|
33
|
+
""" with open(newtxtfile, 'w') as f:
|
34
|
+
for line in new_line:
|
35
|
+
f.write(line + '\n') """
|
36
|
+
|
19
37
|
|
20
38
|
def get_ua():
|
21
39
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
@@ -99,6 +117,11 @@ def get_ua_org():
|
|
99
117
|
"Openwave/UCWEB7.0.2.37/28/999",
|
100
118
|
|
101
119
|
]
|
120
|
+
with open(newtxtfile, 'w') as f:
|
121
|
+
for line in ua_list:
|
122
|
+
f.write(line + '\n')
|
102
123
|
# print(f'Using User-Agent: {ua}')
|
103
124
|
ua = random.choice(ua_list)
|
104
125
|
return ua
|
126
|
+
|
127
|
+
# get_ua_org()
|
oafuncs/oa_file.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
Author: Liu Kun && 16031215@qq.com
|
5
5
|
Date: 2024-09-17 15:07:13
|
6
6
|
LastEditors: Liu Kun && 16031215@qq.com
|
7
|
-
LastEditTime: 2024-
|
7
|
+
LastEditTime: 2024-12-02 10:33:19
|
8
8
|
FilePath: \\Python\\My_Funcs\\OAFuncs\\oafuncs\\oa_file.py
|
9
9
|
Description:
|
10
10
|
EditPlatform: vscode
|
@@ -19,7 +19,43 @@ import os
|
|
19
19
|
import re
|
20
20
|
import shutil
|
21
21
|
|
22
|
-
__all__ = ['link_file', 'copy_file', '
|
22
|
+
__all__ = ['find_file', 'link_file', 'copy_file', 'rename_file', 'make_folder', 'clear_folder', 'remove_empty_folders', 'remove', 'file_size']
|
23
|
+
|
24
|
+
|
25
|
+
def find_file(parent_path, fname, mode='path'):
|
26
|
+
'''
|
27
|
+
description:
|
28
|
+
param {*} parent_path: The parent path where the files are located
|
29
|
+
param {*} fname: The file name pattern to search for
|
30
|
+
param {*} mode: 'path' to return the full path of the files, 'file' to return only the file names
|
31
|
+
return {*} A list of file paths or file names if files are found, None otherwise
|
32
|
+
'''
|
33
|
+
def natural_sort_key(s):
|
34
|
+
"""生成一个用于自然排序的键"""
|
35
|
+
return [int(text) if text.isdigit() else text.lower() for text in re.split('([0-9]+)', s)]
|
36
|
+
|
37
|
+
# 将parent_path和fname结合成完整的搜索路径
|
38
|
+
search_pattern = os.path.join(str(parent_path), fname)
|
39
|
+
|
40
|
+
# 使用glob模块查找所有匹配的文件
|
41
|
+
matched_files = glob.glob(search_pattern)
|
42
|
+
|
43
|
+
# 如果没有找到任何文件,则返回False
|
44
|
+
if not matched_files:
|
45
|
+
return None
|
46
|
+
|
47
|
+
# 在find_files函数中替换natsorted调用
|
48
|
+
matched_files = sorted(matched_files, key=natural_sort_key)
|
49
|
+
|
50
|
+
# 根据mode参数决定返回的内容
|
51
|
+
if mode == 'file':
|
52
|
+
# 只返回文件名
|
53
|
+
result = [os.path.basename(file) for file in matched_files]
|
54
|
+
else: # 默认为'path'
|
55
|
+
# 返回文件的绝对路径
|
56
|
+
result = [os.path.abspath(file) for file in matched_files]
|
57
|
+
|
58
|
+
return result
|
23
59
|
|
24
60
|
|
25
61
|
def link_file(src_pattern, dst):
|
@@ -113,14 +149,14 @@ def copy_file(src_pattern, dst):
|
|
113
149
|
print(f'复制文件或目录并重命名: {src_file} -> {dst_file}')
|
114
150
|
|
115
151
|
|
116
|
-
def
|
152
|
+
def rename_file(directory, old_str, new_str):
|
117
153
|
'''
|
118
154
|
# 描述:重命名目录下的文件,支持通配符
|
119
155
|
# 使用示例
|
120
156
|
directory_path = r"E:\windfarm\CROCO_FILES"
|
121
157
|
old_str = "croco"
|
122
158
|
new_str = "roms"
|
123
|
-
|
159
|
+
rename_file(directory_path, old_str, new_str)
|
124
160
|
param {*} directory # 目录
|
125
161
|
param {*} old_str # 要替换的字符串
|
126
162
|
param {*} new_str # 新字符串
|
oafuncs/oa_nc.py
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
#!/usr/bin/env python
|
2
2
|
# coding=utf-8
|
3
|
-
|
3
|
+
"""
|
4
4
|
Author: Liu Kun && 16031215@qq.com
|
5
5
|
Date: 2024-09-17 14:58:50
|
6
6
|
LastEditors: Liu Kun && 16031215@qq.com
|
7
|
-
LastEditTime: 2024-
|
7
|
+
LastEditTime: 2024-12-06 14:16:56
|
8
8
|
FilePath: \\Python\\My_Funcs\\OAFuncs\\oafuncs\\oa_nc.py
|
9
|
-
Description:
|
9
|
+
Description:
|
10
10
|
EditPlatform: vscode
|
11
11
|
ComputerInfo: XPS 15 9510
|
12
12
|
SystemInfo: Windows 11
|
13
13
|
Python Version: 3.11
|
14
|
-
|
15
|
-
|
14
|
+
"""
|
16
15
|
|
17
16
|
import os
|
18
17
|
|
@@ -20,16 +19,16 @@ import netCDF4 as nc
|
|
20
19
|
import numpy as np
|
21
20
|
import xarray as xr
|
22
21
|
|
23
|
-
__all__ = [
|
22
|
+
__all__ = ["get_var", "extract5nc", "write2nc", "merge5nc", "modify_var_value", "modify_var_attr", "rename_var_or_dim", "check_ncfile"]
|
24
23
|
|
25
24
|
|
26
25
|
def get_var(file, *vars):
|
27
|
-
|
26
|
+
"""
|
28
27
|
description: 读取nc文件中的变量
|
29
28
|
param {file: 文件路径, *vars: 变量名}
|
30
29
|
example: datas = get_var(file_ecm, 'h', 't', 'u', 'v')
|
31
30
|
return {datas: 变量数据}
|
32
|
-
|
31
|
+
"""
|
33
32
|
ds = xr.open_dataset(file)
|
34
33
|
datas = []
|
35
34
|
for var in vars:
|
@@ -40,7 +39,7 @@ def get_var(file, *vars):
|
|
40
39
|
|
41
40
|
|
42
41
|
def extract5nc(file, varname):
|
43
|
-
|
42
|
+
"""
|
44
43
|
描述:
|
45
44
|
1、提取nc文件中的变量
|
46
45
|
2、将相应维度提取,建立字典
|
@@ -49,7 +48,7 @@ def extract5nc(file, varname):
|
|
49
48
|
file: 文件路径
|
50
49
|
varname: 变量名
|
51
50
|
example: data, dimdict = extract5nc(file_ecm, 'h')
|
52
|
-
|
51
|
+
"""
|
53
52
|
ds = xr.open_dataset(file)
|
54
53
|
vardata = ds[varname]
|
55
54
|
dims = vardata.dims
|
@@ -63,22 +62,22 @@ def extract5nc(file, varname):
|
|
63
62
|
def _numpy_to_nc_type(numpy_type):
|
64
63
|
"""将NumPy数据类型映射到NetCDF数据类型"""
|
65
64
|
numpy_to_nc = {
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
65
|
+
"float32": "f4",
|
66
|
+
"float64": "f8",
|
67
|
+
"int8": "i1",
|
68
|
+
"int16": "i2",
|
69
|
+
"int32": "i4",
|
70
|
+
"int64": "i8",
|
71
|
+
"uint8": "u1",
|
72
|
+
"uint16": "u2",
|
73
|
+
"uint32": "u4",
|
74
|
+
"uint64": "u8",
|
76
75
|
}
|
77
|
-
return numpy_to_nc.get(str(numpy_type),
|
76
|
+
return numpy_to_nc.get(str(numpy_type), "f4") # 默认使用 'float32'
|
78
77
|
|
79
78
|
|
80
79
|
def write2nc(file, data, varname, coords, mode):
|
81
|
-
|
80
|
+
"""
|
82
81
|
description: 写入数据到nc文件
|
83
82
|
参数:
|
84
83
|
file: 文件路径
|
@@ -87,16 +86,16 @@ def write2nc(file, data, varname, coords, mode):
|
|
87
86
|
coords: 坐标,字典,键为维度名称,值为坐标数据
|
88
87
|
mode: 写入模式,'w'为写入,'a'为追加
|
89
88
|
example: write2nc(r'test.nc', data, 'data', {'time': np.linspace(0, 120, 100), 'lev': np.linspace(0, 120, 50)}, 'a')
|
90
|
-
|
89
|
+
"""
|
91
90
|
# 判断mode是写入还是追加
|
92
|
-
if mode ==
|
91
|
+
if mode == "w":
|
93
92
|
if os.path.exists(file):
|
94
93
|
os.remove(file)
|
95
94
|
print("Warning: File already exists. Deleting it.")
|
96
|
-
elif mode ==
|
95
|
+
elif mode == "a":
|
97
96
|
if not os.path.exists(file):
|
98
97
|
print("Warning: File doesn't exist. Creating a new file.")
|
99
|
-
mode =
|
98
|
+
mode = "w"
|
100
99
|
|
101
100
|
# 打开 NetCDF 文件
|
102
101
|
with nc.Dataset(file, mode, format="NETCDF4") as ncfile:
|
@@ -146,7 +145,72 @@ def write2nc(file, data, varname, coords, mode):
|
|
146
145
|
raise ValueError("Number of dimensions does not match the data shape.")
|
147
146
|
|
148
147
|
|
149
|
-
def merge5nc(file_list, var_name, dim_name, target_filename):
|
148
|
+
def merge5nc(file_list, var_name=None, dim_name=None, target_filename=None):
|
149
|
+
"""
|
150
|
+
批量提取 nc 文件中的变量,按照某一维度合并后写入新的 nc 文件。
|
151
|
+
如果 var_name 是字符串,则认为是单变量;如果是列表,且只有一个元素,也是单变量;
|
152
|
+
如果列表元素大于1,则是多变量;如果 var_name 是 None,则合并所有变量。
|
153
|
+
|
154
|
+
参数:
|
155
|
+
file_list:nc 文件路径列表
|
156
|
+
var_name:要提取的变量名或变量名列表,默认为 None
|
157
|
+
dim_name:用于合并的维度名
|
158
|
+
target_filename:合并后的目标文件名
|
159
|
+
"""
|
160
|
+
# 初始化变量名列表
|
161
|
+
var_names = None
|
162
|
+
|
163
|
+
# 判断 var_name 是单变量、多变量还是合并所有变量
|
164
|
+
if var_name is None:
|
165
|
+
# 获取第一个文件中的所有变量名
|
166
|
+
ds = xr.open_dataset(file_list[0])
|
167
|
+
var_names = list(ds.variables.keys())
|
168
|
+
ds.close()
|
169
|
+
elif isinstance(var_name, str):
|
170
|
+
var_names = [var_name]
|
171
|
+
elif isinstance(var_name, list):
|
172
|
+
var_names = var_name
|
173
|
+
else:
|
174
|
+
raise ValueError("var_name must be a string, a list of strings, or None")
|
175
|
+
|
176
|
+
# 初始化合并数据字典
|
177
|
+
merged_data = {}
|
178
|
+
|
179
|
+
# 遍历文件列表
|
180
|
+
for i, file in enumerate(file_list):
|
181
|
+
print(f"\rReading file {i + 1}/{len(file_list)}...", end="")
|
182
|
+
ds = xr.open_dataset(file)
|
183
|
+
for var_name in var_names:
|
184
|
+
var = ds[var_name]
|
185
|
+
# 如果变量包含合并维度,则合并它们
|
186
|
+
if dim_name in var.dims:
|
187
|
+
if var_name not in merged_data:
|
188
|
+
merged_data[var_name] = [var]
|
189
|
+
else:
|
190
|
+
merged_data[var_name].append(var)
|
191
|
+
# 如果变量不包含合并维度,则仅保留第一个文件中的值
|
192
|
+
else:
|
193
|
+
if var_name not in merged_data:
|
194
|
+
merged_data[var_name] = var
|
195
|
+
ds.close()
|
196
|
+
|
197
|
+
print("\nMerging data...")
|
198
|
+
for var_name in merged_data:
|
199
|
+
if isinstance(merged_data[var_name], list):
|
200
|
+
merged_data[var_name] = xr.concat(merged_data[var_name], dim=dim_name)
|
201
|
+
|
202
|
+
merged_data = xr.Dataset(merged_data)
|
203
|
+
|
204
|
+
print("Writing data to file...")
|
205
|
+
if os.path.exists(target_filename):
|
206
|
+
print("Warning: The target file already exists.")
|
207
|
+
print("Removing existing file...")
|
208
|
+
os.remove(target_filename)
|
209
|
+
merged_data.to_netcdf(target_filename)
|
210
|
+
print(f'File "{target_filename}" has been created.')
|
211
|
+
|
212
|
+
|
213
|
+
def merge5nc_his1(file_list, var_name, dim_name, target_filename):
|
150
214
|
"""
|
151
215
|
批量提取 nc 文件中的某一变量,按照某一维度合并后写入新的 nc 文件。
|
152
216
|
|
@@ -174,7 +238,7 @@ def merge5nc(file_list, var_name, dim_name, target_filename):
|
|
174
238
|
data.to_netcdf(target_filename)
|
175
239
|
|
176
240
|
|
177
|
-
def
|
241
|
+
def merge5nc_vars_his1(file_list, var_names, dim_name, target_filename):
|
178
242
|
"""
|
179
243
|
批量提取 nc 文件中的两个变量,按照某一维度合并后写入新的 nc 文件。
|
180
244
|
|
@@ -220,7 +284,7 @@ def modify_var_value(nc_file_path, variable_name, new_value):
|
|
220
284
|
"""
|
221
285
|
try:
|
222
286
|
# Open the NetCDF file
|
223
|
-
dataset = nc.Dataset(nc_file_path,
|
287
|
+
dataset = nc.Dataset(nc_file_path, "r+")
|
224
288
|
# Get the variable to be modified
|
225
289
|
variable = dataset.variables[variable_name]
|
226
290
|
# Modify the value of the variable
|
@@ -243,7 +307,7 @@ def modify_var_attr(nc_file_path, variable_name, attribute_name, attribute_value
|
|
243
307
|
example: modify_var_attr('test.nc', 'data', 'long_name', 'This is a test variable.')
|
244
308
|
"""
|
245
309
|
try:
|
246
|
-
ds = nc.Dataset(nc_file_path,
|
310
|
+
ds = nc.Dataset(nc_file_path, "r+")
|
247
311
|
if variable_name not in ds.variables:
|
248
312
|
raise ValueError(f"Variable '{variable_name}' not found in the NetCDF file.")
|
249
313
|
|
@@ -272,7 +336,7 @@ def rename_var_or_dim(ncfile_path, old_name, new_name):
|
|
272
336
|
example: rename_var_or_dim('test.nc', 'time', 'ocean_time')
|
273
337
|
"""
|
274
338
|
try:
|
275
|
-
with nc.Dataset(ncfile_path,
|
339
|
+
with nc.Dataset(ncfile_path, "r+") as dataset:
|
276
340
|
# If the old name is not found as a variable or dimension, print a message
|
277
341
|
if old_name not in dataset.variables and old_name not in dataset.dimensions:
|
278
342
|
print(f"Variable or dimension {old_name} not found in the file.")
|
@@ -299,7 +363,7 @@ def check_ncfile(ncfile, if_delete=False):
|
|
299
363
|
return False
|
300
364
|
|
301
365
|
try:
|
302
|
-
with nc.Dataset(ncfile,
|
366
|
+
with nc.Dataset(ncfile, "r") as f:
|
303
367
|
# 确保f被使用,这里我们检查文件中变量的数量
|
304
368
|
if len(f.variables) > 0:
|
305
369
|
return True
|
@@ -322,8 +386,6 @@ def check_ncfile(ncfile, if_delete=False):
|
|
322
386
|
return False
|
323
387
|
|
324
388
|
|
325
|
-
if __name__ ==
|
326
|
-
|
389
|
+
if __name__ == "__main__":
|
327
390
|
data = np.random.rand(100, 50)
|
328
|
-
write2nc(r
|
329
|
-
'data', {'time': np.linspace(0, 120, 100), 'lev': np.linspace(0, 120, 50)}, 'a')
|
391
|
+
write2nc(r"test.nc", data, "data", {"time": np.linspace(0, 120, 100), "lev": np.linspace(0, 120, 50)}, "a")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: oafuncs
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.77
|
4
4
|
Summary: My short description for my project.
|
5
5
|
Home-page: https://github.com/Industry-Pays/OAFuncs
|
6
6
|
Author: Kun Liu
|
@@ -9,9 +9,6 @@ License: MIT
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
10
10
|
Classifier: Programming Language :: Python
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
12
|
-
Classifier: Programming Language :: Python :: 3.6
|
13
|
-
Classifier: Programming Language :: Python :: 3.7
|
14
|
-
Classifier: Programming Language :: Python :: 3.8
|
15
12
|
Classifier: Programming Language :: Python :: 3.9
|
16
13
|
Classifier: Programming Language :: Python :: 3.10
|
17
14
|
Classifier: Programming Language :: Python :: 3.11
|
@@ -267,6 +264,12 @@ oafuncs.oa_nc.write2nc(r'I:\test.nc', data,
|
|
267
264
|
|
268
265
|
- oa_file
|
269
266
|
|
267
|
+
- find_file
|
268
|
+
|
269
|
+
2024/12/02更新
|
270
|
+
|
271
|
+
查找满足条件的所有文件
|
272
|
+
|
270
273
|
- link_file
|
271
274
|
|
272
275
|
2024/10/28更新
|
@@ -279,9 +282,9 @@ oafuncs.oa_nc.write2nc(r'I:\test.nc', data,
|
|
279
282
|
|
280
283
|
复制文件
|
281
284
|
|
282
|
-
-
|
285
|
+
- rename_file
|
283
286
|
|
284
|
-
2024/
|
287
|
+
2024/12/02更新
|
285
288
|
|
286
289
|
按一定规则重命名文件(可多个)
|
287
290
|
|
@@ -1,24 +1,24 @@
|
|
1
1
|
oafuncs/__init__.py,sha256=2QiNjIIMtstD8y9HWlu23yiZGmmljkNUQknHEbnRwYI,673
|
2
|
-
oafuncs/oa_cmap.py,sha256=
|
2
|
+
oafuncs/oa_cmap.py,sha256=LnHI6vMCoFFkMq4P3RgItmJ01Kx5MjjwwlhnaqhRLKI,7242
|
3
3
|
oafuncs/oa_data.py,sha256=H9qZrUziOpc456iIL-1lBwSkBPApl2rlR-ajZg-mDMs,8119
|
4
4
|
oafuncs/oa_draw.py,sha256=K5B_otgx7Bu5P6ZYipNt9C-uRI1w9oxwY1M1F0-kGuM,17329
|
5
|
-
oafuncs/oa_file.py,sha256=
|
5
|
+
oafuncs/oa_file.py,sha256=iHgv0CTH4k_7YUnQ8-qQbLoz_f2lUmVhzGWQ2LkPFP8,11624
|
6
6
|
oafuncs/oa_help.py,sha256=ppNktmtNzs15R20MD1bM7yImlTQ_ngMwvoIglePOKXA,1000
|
7
|
-
oafuncs/oa_nc.py,sha256=
|
7
|
+
oafuncs/oa_nc.py,sha256=7KSONwujhElQo1dfuEE4EpVfaqnWyILdGvsdqpKrnMI,14666
|
8
8
|
oafuncs/oa_python.py,sha256=XPTP3o7zTFzfJR_YhsKfQksa3bSYwXsne9YxlJplCEA,3994
|
9
|
-
oafuncs/oa_down/
|
9
|
+
oafuncs/oa_down/User_Agent-list.txt,sha256=j88ML0zwVibNj484ehurfZMX-PZ7G_1TwhwpcJZMIB0,884393
|
10
|
+
oafuncs/oa_down/__init__.py,sha256=nY5X7gM1jw7DJxyooR2UJSq4difkw-flz2Ucr_OuDbA,540
|
10
11
|
oafuncs/oa_down/hycom_3hourly.py,sha256=wVJgA8SBMr0RurTz7AkI8d5pJ4sj1oWl__cnSPATiCA,50343
|
11
12
|
oafuncs/oa_down/literature.py,sha256=dT3-7-beEzQ9mTP8LNV9Gf3q5Z1Pqqjc6FOS010HZeQ,17833
|
12
|
-
oafuncs/oa_down/
|
13
|
-
oafuncs/oa_down/test.py,sha256=9HTGKrQ8V2YVKsvBoVsuG7W-z8BurLGFBKUuf_LP94o,8256
|
13
|
+
oafuncs/oa_down/test.py,sha256=5sm73uduL0WO1GFv66ONIDLDAFavGz5qFoQpah5PbW8,8934
|
14
14
|
oafuncs/oa_sign/__init__.py,sha256=QKqTFrJDFK40C5uvk48GlRRbGFzO40rgkYwu6dYxatM,563
|
15
15
|
oafuncs/oa_sign/meteorological.py,sha256=mLbupsZSq427HTfVbZMvIlFzDHwSzQAbK3X19o8anFY,6525
|
16
16
|
oafuncs/oa_sign/ocean.py,sha256=xrW-rWD7xBWsB5PuCyEwQ1Q_RDKq2KCLz-LOONHgldU,5932
|
17
17
|
oafuncs/oa_sign/scientific.py,sha256=a4JxOBgm9vzNZKpJ_GQIQf7cokkraV5nh23HGbmTYKw,5064
|
18
18
|
oafuncs/oa_tool/__init__.py,sha256=IKOlqpWlb4cMDCtq2VKR_RTxQHDNqR_vfqqsOsp_lKQ,466
|
19
19
|
oafuncs/oa_tool/email.py,sha256=4lJxV_KUzhxgLYfVwYTqp0qxRugD7fvsZkXDe5WkUKo,3052
|
20
|
-
oafuncs-0.0.
|
21
|
-
oafuncs-0.0.
|
22
|
-
oafuncs-0.0.
|
23
|
-
oafuncs-0.0.
|
24
|
-
oafuncs-0.0.
|
20
|
+
oafuncs-0.0.77.dist-info/LICENSE.txt,sha256=rMtLpVg8sKiSlwClfR9w_Dd_5WubTQgoOzE2PDFxzs4,1074
|
21
|
+
oafuncs-0.0.77.dist-info/METADATA,sha256=66VNZ7aM1IFNy5H50VrBOMDlphZ0Mxr-gmBZVC6oAT4,22481
|
22
|
+
oafuncs-0.0.77.dist-info/WHEEL,sha256=pxeNX5JdtCe58PUSYP9upmc7jdRPgvT0Gm9kb1SHlVw,109
|
23
|
+
oafuncs-0.0.77.dist-info/top_level.txt,sha256=bgC35QkXbN4EmPHEveg_xGIZ5i9NNPYWqtJqaKqTPsQ,8
|
24
|
+
oafuncs-0.0.77.dist-info/RECORD,,
|