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 或任何其他文件一起使用。
使用 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 或任何其他文件一起使用。