You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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对象转换成字符串再写入即可,有两种常用方式可选:

  1. 转为可读的Path结构字符串:用str()函数把Path对象转换成你print(path_alt)时看到的那种结构化格式
  2. 获取原始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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:53