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

Kivy Python中如何访问列表内前两位姓名并写入文件,报错如何解决

问题原因梳理

  • 你从输入框拿到的name是逗号分隔的整段字符串,不是自动拆分好的列表,直接把整段字符串append到data_list后,列表里只有1个元素,自然无法通过索引拿到第一个、第二个姓名
  • 报错io.UnsupportedOperation: not writable是因为文件操作逻辑混乱:你以只写的w模式打开文件后,同时初始化了csv_reader,只读模式的reader无法在只写模式的文件句柄上运行,且你多次重复打开同一文件,冗余逻辑也容易引发冲突
  • 你调用writer.writerow(data_list[0])时,如果传入的是字符串,writerow会把字符串拆成单个字符逐格写入,属于常见的使用误区

实现方法

Kivy环境下的列表操作和原生Python完全一致,没有特殊限制,按以下步骤修正即可:

  1. 先把输入的姓名字符串按逗号拆分,同时清除每个姓名前后的多余空格
  2. 避免重复打开文件,按需选择普通txt写入或csv格式写入
  3. 拆分后的列表直接用[0]取第一个姓名,[1]取第二个姓名即可

修正后可运行代码

import csv

def pressed(self, instance):
    # 从输入框取原始字符串
    name_str = self.name.text
    # 按逗号拆分,清洗空格、过滤空值,得到正式的姓名列表
    name_list = [n.strip() for n in name_str.split(',') if n.strip()]
    
    # 避免索引越界,先判断输入的姓名数量是否足够
    if len(name_list) < 2:
        print("输入的姓名不足2个")
        return
    
    # 直接通过索引取对应姓名
    first_name = name_list[0]
    second_name = name_list[1]
    
    # 写csv格式文件示例
    with open("print.txt", "w", encoding="UTF-8", newline="") as data_file:
        writer = csv.writer(data_file)
        # 注意传入列表,避免字符串被拆分为单个字符
        writer.writerow([first_name, second_name])
    
    # 不需要csv格式时可以直接写普通txt,替换上面的代码即可
    # with open("print.txt", "w", encoding="UTF-8") as f:
    #     f.write(f"第一个姓名:{first_name}\n第二个姓名:{second_name}")

内容的提问来源于stack exchange,提问作者NotTadej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:21:01