Python os.walk 在 Macbook 2021 上使用 macos 将 DIR 报告为文件遍历外部 NTFS 驱动器

Python os.walk reports DIR as FILE walking external NTFS drive with macos on Macbook 2021

使用 Macbook 2021 (arm64)。

uname -a
Darwin MacBook.local 21.1.0 Darwin Kernel Version 21.1.0: Wed Oct 13 17:33:01 PDT 2021; root:xnu-8019.41.5~1/RELEASE_ARM64_T6000 arm64

外部驱动器,SSD2TB,是 NTFS。

diskutil info disk4
   Device Identifier:         disk4
   Device Node:               /dev/disk4
   Whole:                     Yes
   Part of Whole:             disk4
   Device / Media Name:       External

   Volume Name:               SSD2TB
   Mounted:                   Yes
   Mount Point:               /Volumes/SSD2TB

   Content (IOContent):       None
   File System Personality:   NTFS
   Type (Bundle):             ntfs
   Name (User Visible):       Windows NT File System (NTFS)

最简单的测试,就是简单地报告每个循环的目录名称,例如

python3
Python 3.10.1 (main, Dec 31 2021, 10:22:35) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, os.path
>>> os.chdir("/Volumes/SSD2TB/Photos")
>>> from glob import glob
>>> glob('*')
['Pictures']
>>> for d,dd,f in os.walk('.'): print(f"{dd}")
... 
[]
>>> os.path.isdir('Pictures')
True
>>> for d, dd, f in os.walk('.'):
...     print(f"{f}")
... 
['.DS_Store', 'Pictures']
>>> for d, dd, f in os.walk('.'):
...     print(f"{d}")
... 
.

有谁知道为什么'.'中的子目录?在 os.walk 中被报告为文件(通过在 'f' 变量中返回? 'dd' 变量应该是目录列表 returns 一个空列表。

起初我以为这是我在控制台中使用的 Spyder 中的一些怪癖 运行 python,但是如您所见,我得到的结果完全相同 运行 python直接

最后一点。 如果我在本地驱动器上的路径中尝试相同的测试,那么一切都会按预期运行。目录在变量 'dd' 中报告,文件在 'f'.

这与 os.walk 与 Apple 的 NTFS 处理程序的接口方式有关。如果您使用适用于 MacOS 的专有 NTFS 工具,那么 os.walk 可以正常工作。

查看我的 pathlib 替代代码,以便与 Apple NTFS 或任何其他文件一起使用。

https://superuser.com/questions/1701107/macos-with-external-ntfs-default-read-only-python-os-walk-will-not-recurse-th