遍历目录路径并使用 trimesh 打开它们
Walking through directory path and opening them with trimesh
我有以下代码:
import os
import trimesh
# Core settings
rootdir = 'path'
extension = ".zip"
for root, dirs, files in os.walk(rootdir):
if not root.endswith(".zip"):
for file in files:
if file.endswith(".stl"):
mesh = trimesh.load(file)
我收到以下错误:
ValueError: File object passed as string that is not a file!
然而,当我一个一个地打开文件时,它起作用了。可能是什么原因?
那是因为 file
是 文件名 ,而不是完整的文件路径
通过将 os.path.join
与包含目录一起使用来修复此问题:
mesh = trimesh.load(os.path.join(root,file))
这不是对您问题的直接回答。但是,您可能有兴趣注意到现在针对这种情况有一个不太复杂的范例。它涉及使用 pathlib
模块。
我不使用 trimesh
。我将改为处理 pdf
个文档。
首先,您可以仅用一行递归地识别目录及其子目录中的所有 pdf
文件。
>>> from pathlib import Path
>>> for item in path.glob('**/*.pdf'):
... item
...
WindowsPath('C:/Quantarctica2/Quantarctica-Get_Started.pdf')
WindowsPath('C:/Quantarctica2/Quantarctica2_GetStarted.pdf')
WindowsPath('C:/Quantarctica2/Basemap/Terrain/BEDMAP2/tc-7-375-2013.pdf') WindowsPath('C:/Quantarctica2/Scientific/Glaciology/ALBMAP/1st_ReadMe_ALBMAP_LeBrocq_2010_EarthSystSciData.pdf')
WindowsPath('C:/Quantarctica2/Scientific/Glaciology/ASAID/Bindschadler2011TC_GroundingLines.pdf')
WindowsPath('C:/Quantarctica2/Software/CIA_WorldFactbook_Antarctica.pdf')
WindowsPath('C:/Quantarctica2/Software/CIA_WorldFactbook_SouthernOcean.pdf')
WindowsPath('C:/Quantarctica2/Software/QGIS-2.2-UserGuide-en.pdf')
您会注意到 (a) 完整路径可用,并且 (b) 路径在对象实例中可用。幸运的是,使用 str
.
很容易恢复完整路径
>>> import fitz
>>> for item in path.glob('**/*.pdf'):
... doc = fitz.Document(str(item))
...
这一行表明最终的 pdf
文档已作为 fitz
文档加载,准备好进行后续处理。
>>> doc
fitz.Document('C:\Quantarctica2\Software\QGIS-2.2-UserGuide-en.pdf')
我有以下代码:
import os
import trimesh
# Core settings
rootdir = 'path'
extension = ".zip"
for root, dirs, files in os.walk(rootdir):
if not root.endswith(".zip"):
for file in files:
if file.endswith(".stl"):
mesh = trimesh.load(file)
我收到以下错误:
ValueError: File object passed as string that is not a file!
然而,当我一个一个地打开文件时,它起作用了。可能是什么原因?
那是因为 file
是 文件名 ,而不是完整的文件路径
通过将 os.path.join
与包含目录一起使用来修复此问题:
mesh = trimesh.load(os.path.join(root,file))
这不是对您问题的直接回答。但是,您可能有兴趣注意到现在针对这种情况有一个不太复杂的范例。它涉及使用 pathlib
模块。
我不使用 trimesh
。我将改为处理 pdf
个文档。
首先,您可以仅用一行递归地识别目录及其子目录中的所有 pdf
文件。
>>> from pathlib import Path
>>> for item in path.glob('**/*.pdf'):
... item
...
WindowsPath('C:/Quantarctica2/Quantarctica-Get_Started.pdf')
WindowsPath('C:/Quantarctica2/Quantarctica2_GetStarted.pdf')
WindowsPath('C:/Quantarctica2/Basemap/Terrain/BEDMAP2/tc-7-375-2013.pdf') WindowsPath('C:/Quantarctica2/Scientific/Glaciology/ALBMAP/1st_ReadMe_ALBMAP_LeBrocq_2010_EarthSystSciData.pdf')
WindowsPath('C:/Quantarctica2/Scientific/Glaciology/ASAID/Bindschadler2011TC_GroundingLines.pdf')
WindowsPath('C:/Quantarctica2/Software/CIA_WorldFactbook_Antarctica.pdf')
WindowsPath('C:/Quantarctica2/Software/CIA_WorldFactbook_SouthernOcean.pdf')
WindowsPath('C:/Quantarctica2/Software/QGIS-2.2-UserGuide-en.pdf')
您会注意到 (a) 完整路径可用,并且 (b) 路径在对象实例中可用。幸运的是,使用 str
.
>>> import fitz
>>> for item in path.glob('**/*.pdf'):
... doc = fitz.Document(str(item))
...
这一行表明最终的 pdf
文档已作为 fitz
文档加载,准备好进行后续处理。
>>> doc
fitz.Document('C:\Quantarctica2\Software\QGIS-2.2-UserGuide-en.pdf')