Проходя по пути к каталогу и открывая их с помощью 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!

Когда я открываю файлы один за другим, это работает. Что может быть причиной?

2 ответа

Решение

Это потому что 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')

Вы заметили, что (а) доступны полные пути и (б) пути доступны в экземплярах объектов. К счастью, полные пути легко восстановить, используя 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')
Другие вопросы по тегам