首页 > 解决方案 > 脚本无法将数据保存到文件

问题描述

基于 *.blend 文件,我必须编写一个脚本来获取有关对象的信息并将它们保存到 json。这个脚本可以在 Blender 中打开,也可以运行。启动应将 json 文件与当前目录中的数据一起保存。

所以我创建了这个:

   import bpy
   import json

   objects = bpy.context.scene.objects
   data = {}

   for ob in objects:
       item = {}
       item['location'] = ob.location
       if ob.name == 'Cube':
           item['material_name'] = ob.active_material.name
           data[ob.name] = item
       elif ob.name == 'Camera':
           item['camera_type'] = ob.data.type
           data[ob.name] = item
       elif ob.name == 'Lamp':
           item['lamp_type'] = ob.data.type
           data[ob.name] = item

   with open('scene_objects.json', 'w') as json_file:
       json.dump(data, json_file)

但是,当我在 Blender 中运行脚本时,我收到以下错误:

PermissionError: [Errno 13] Permission denied: 'scene_objects.json'   

我是使用 Blender 的初学者,所以也许不可能从 Blender 写入文件?但是,如果我能做到,我想请教如何做?

标签: pythonblender

解决方案


您的问题不在于搅拌机,操作系统会根据文件系统权限阻止文件的创建(或可写性)。

这条线 -

with open('scene_objects.json', 'w') as json_file:

将在当前工作目录中创建一个新文件(或打开现有文件) 。运行搅拌机时,这可能是几个选项之一,具体取决于您使用的操作系统。从 GUI 启动搅拌机也可能会让您没有有效的 CWD,或者用户无权写入的临时目录。

您可以使用os.chdir()将 CWD 更改为您知道存在并且可以写入的 CWD。您还可以指定完整路径而不仅仅是文件名。


推荐阅读