SVG路径提取写入文件报错:Must be string or read-only character buffer, not Path
解决SVG路径提取时的类型错误问题
你遇到的Must be string or read-only character buffer, not Path错误,核心原因很直白:你试图直接把svg.path.Path对象写入文件,但file.write()方法只接受字符串类型的参数,它不会像print()那样自动帮你做类型转换。
具体修复方案
只需要把Path对象转换成字符串再写入即可,有两种常用方式可选:
- 转为可读的Path结构字符串:用
str()函数把Path对象转换成你print(path_alt)时看到的那种结构化格式 - 获取原始SVG路径指令:直接调用
Path对象的.d属性,得到SVG文件里原始的d属性字符串(比如"M410,224 L411,227...")
下面是修改后的完整代码,我还改用了with语句来自动管理文件(避免忘记关闭文件的潜在问题):
from svg.path import parse_path from svgpathtools import svg2paths with open("a.txt", 'w') as f: paths, attributes = svg2paths('cou.svg') for k, v in enumerate(attributes): path_alt = parse_path(v['d']) # 方式1:转成结构化的Path字符串,每个路径后加换行分隔 f.write(str(path_alt) + '\n') # 如果你更想要SVG原始的路径指令,就换成下面这行: # f.write(path_alt.d + '\n')
补充说明
你测试print(path_alt[0])能正常输出,是因为print()函数会自动把传入的对象转换成字符串,但file.write()没有这个自动转换逻辑,所以必须手动处理类型。
如果想写入单个路径段(比如path_alt[0]这个Line对象),同样需要转成字符串:
f.write(str(path_alt[0]) + '\n')
内容的提问来源于stack exchange,提问作者Hajar Ch
相关产品推荐
相关产品推荐

