脚本无法将数据保存到文件
Script can't save data to file
基于 *.blend 文件,我必须编写一个脚本来获取有关对象的信息并将它们保存到 json。此脚本可以在 Blender 或 运行ning 中打开。启动应将包含数据的 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 写入文件?但是,如果我能做到,我就如何做征求意见?
您的问题不在于 blender,OS 阻止了基于文件系统权限的文件创建(或可写性)。
行-
with open('scene_objects.json', 'w') as json_file:
将在当前 working directory 中创建一个新文件(或打开现有文件)。 运行 blender 可能是几个选项之一,具体取决于您使用的 OS。也有可能从 GUI 启动 blender 会让你没有有效的 CWD,或者用户没有权限写入的临时目录。
您可以使用 os.chdir()
将 CWD 更改为您知道存在并且可以写入的 CWD。您还可以指定完整路径而不仅仅是文件名。
基于 *.blend 文件,我必须编写一个脚本来获取有关对象的信息并将它们保存到 json。此脚本可以在 Blender 或 运行ning 中打开。启动应将包含数据的 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 写入文件?但是,如果我能做到,我就如何做征求意见?
您的问题不在于 blender,OS 阻止了基于文件系统权限的文件创建(或可写性)。
行-
with open('scene_objects.json', 'w') as json_file:
将在当前 working directory 中创建一个新文件(或打开现有文件)。 运行 blender 可能是几个选项之一,具体取决于您使用的 OS。也有可能从 GUI 启动 blender 会让你没有有效的 CWD,或者用户没有权限写入的临时目录。
您可以使用 os.chdir()
将 CWD 更改为您知道存在并且可以写入的 CWD。您还可以指定完整路径而不仅仅是文件名。