python - 脚本无法将数据保存到文件
问题描述
基于 *.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 写入文件?但是,如果我能做到,我想请教如何做?
解决方案
您的问题不在于搅拌机,操作系统会根据文件系统权限阻止文件的创建(或可写性)。
这条线 -
with open('scene_objects.json', 'w') as json_file:
将在当前工作目录中创建一个新文件(或打开现有文件) 。运行搅拌机时,这可能是几个选项之一,具体取决于您使用的操作系统。从 GUI 启动搅拌机也可能会让您没有有效的 CWD,或者用户无权写入的临时目录。
您可以使用os.chdir()
将 CWD 更改为您知道存在并且可以写入的 CWD。您还可以指定完整路径而不仅仅是文件名。
推荐阅读
- ios - 为什么 BindableObject.didChange 必须是 Subject?
- cobol - 使用标签和属性生成 COBOL XML
- java - FizzBuzz:它给了我错误的打印声明。怎么了?
- ios - 扫描条码 Swift 中的 Unicode 字符
- angular - Angular / TS:如何扩展接口
- python-3.x - 需要使用python创建增量序列号
- android - 检测滚动视图在android上的位置
- excel - 如何在一张表中获得两个 Wocksheet_Changes 以在下拉列表中进行多项选择
- graph - gnuplot:热图的默认值(如果没有可用数据)
- spring - Spring Boot 和 Kotlin - 如何验证 JSON 对象