1

我有以下代码:

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!

但是,当我一一打开文件时,它可以工作。可能是什么原因 ?

4

2 回答 2

2

那是因为file文件名,而不是完整的文件路径

通过os.path.join与包含目录一起使用来解决此问题:

mesh = trimesh.load(os.path.join(root,file))
于 2017-06-10T15:40:38.600 回答
2

这不是您问题的直接答案。但是,您可能有兴趣注意到现在针对这种情况有一个不太复杂的范例。它涉及使用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')
于 2017-06-10T17:16:20.770 回答