下载更改名称的 .nc 文件

问题描述 投票:0回答:1

我正在从互联网来源下载文件,这些文件会定期更改一个特定的字符串。 例如:从“L8”到“L6” 在文件中:

VT_OTT-V4-HGTHI-L6T09_T4_2682.nc
VT_OTT-V4-HGTHI-L6T09_T4_2683.nc
VT_OTT-V4-HGTHI-L6T09_T4_2684.nc
VT_OTT-V4-HGTHI-L4T12_T4_2685.nc
VT_OTT-V4-HGTHI-L9T07_T4_2686.nc
VT_OTT-V4-HGTHI-L4T12_T4_2687.nc

等等...

我为了正确下载文件,我写了以下行:

Level = int((path[path.find("L4T" or "L6T" or "L9T")+3:path.find("_T4")]))

(级别也在变化,但我指定为两位数整数)

但是,我收到错误:

ValueError: invalid literal for int() with base 10: '\\\\folder\\\\folder\\\\VT_OTT-V4-HGTHI-L4T09'
Traceback (most recent call last):
  File "C:\folder\folder\script.py", line xx, in <module>
    Level = int((path[path.find("L4T" or "L6T" or "L9T")+3:path.find("_T4")]))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '\\\\folder\\\\folder\\\\VT_OTT-V4-HGTHI-L4T09'

正确的语法是怎样的?

python syntax netcdf
1个回答
0
投票

这是问题的根源:

path.find("L4T" or "L6T" or "L9T")

这部分相当于

path.find("L4T")
,因为
"L4T"
是一个非空字符串。 (尝试
print("L4T" or "L6T" or "L9T")
向自己证明这一点。)原因是什么?
or
并不像您想象的那样工作。

如果找不到子字符串,则

str.find
返回
-1
。由于您实际上只是在寻找
"L4T"
,因此当字符串不包含该内容时,您会将
-1
放入计算中,这意味着(在添加 3 后)您从字符串的索引 2 开始,而不是从级别编号。这意味着您试图将大部分路径传递给
int()
,正如您所见,这不起作用,因为它不是数字。

解决此问题的一种方法是使用正则表达式:

re.search("L4T|L6T|L9T").start()

如果您不想使用正则表达式,您可以使用

max()
来查找不是
-1
的结果:

max(path.find("L4T"), path.find("L6T"), path.find("L9T"))

或者,这是一个非常聪明的位,它依赖于两个

find
返回
-1
(实际上不要这样做):

path.find("L4T") * path.find("L6T") * path.find("L9T")
© www.soinside.com 2019 - 2024. All rights reserved.