当我在 PATH 中有一个以数值开头的子文件夹时,为什么我的代码不起作用?

why doesn't my code work when i have a subfolder statring with numeric values in PATH?

我正在读取包含多个图像的文件夹,这是我读取路径中指定文件夹的代码部分,

path =  'C:\main\folder\sub-folder001\V.1\abc15'

for infile in glob.glob( os.path.join(path, '*.tif') ):

    Img = gdal.Open( infile )
    if Img is None:
      print 'Unable to open Input Image'
      sys.exit(1)

... 所以代码不起作用,因为它不会读取该文件夹中的任何文件,但它也不会引发任何错误。我认为只有当路径具有任何以数值开头的子文件夹名称时它才不工作。

此处 Path = 'C:\main\folder\sub-folder001\V.1\abc15' 如您所见,它有两个以数值开头的子文件夹(08001 和 2015)。

** 当没有以数值开头的此类子文件夹时,它绝对可以正常工作。

为什么会发生这种情况,我该如何解决?? 另外,如果提供的原始路径中存在任何子文件夹,我该如何自动查看?

当我在命令 shell 中查找该路径时,显示的内容如下。

>>> path =  'C:\P\S\Mo\C008\L\V.1R15'
>>> path
'C:\P\S\Mo\C\x008008\L\V.1R\x815'

您需要转义字符串中的反斜杠:

path =  'C:\P\S\Mo\C\08008\L\V.1R\2015'

你的路径在没有数字的情况下有效,这只是巧合。如果您的路径包含以 abncertain other letters 开头的文件夹,它也不会起作用。

后跟三个数字的反斜杠被解析为八进制数,其值将插入到字符串中。第一个这样的序列是 08 不是有效的八进制数字,因此 Python 在零后停止解析八进制。这在您的输出中以十六进制显示为 \x00。第二个数列为1,八进制201等于十六进制81—\x81.

或者,您可以使用原始字符串:

path =  r'C:\P\S\Mo\C008\L\V.1R15'

字符串文字前的 r 告诉 Python 不要解析字符串中的转义序列。使用 Windows 路径时,这可以使您的路径看起来更漂亮。

第三种可能性是在路径字符串中使用正斜杠而不是反斜杠:

path =  'C:/P/S/Mo/C/08008/L/V.1R/2015'