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

Python读取CSV追加列表元素时字符串被拆分为单个字符怎么办

问题成因

你遇到的字符串拆成单字符的问题核心原因有两个:

  • 列表追加逻辑错误:Python中列表使用+=操作符时,等价于调用extend()方法,会遍历传入的可迭代对象,将其中的每个元素逐个追加到列表。字符串本身是由单个字符组成的可迭代序列,因此Living_beings+=row['Category']会把分类字符串拆成一个个字符存入列表,而非把整个分类名作为单个元素存入。
  • 日期匹配逻辑存在隐患:你当前写的date.today().day in row['Date']是字符串子串匹配逻辑,不仅存在类型不匹配风险(整数和字符串做成员判断会报错),还会出现误匹配,比如当天是1号时,会误匹配到Date字段里含1的14、21这类值。另外你的CSV文件所有字段都被单引号包裹,默认读取时会把单引号作为字段内容的一部分,数据不干净。
修复方案

按以下三点调整代码即可得到预期输出:

  1. 替换列表追加方式:把+=追加字符串改为用append()方法,将整个分类名作为单个元素存入列表。
  2. 修正CSV读取配置:给DictReader指定quotechar="'"参数自动去除包裹字段的单引号,加skipinitialspace=True跳过每行字段前的多余空格。
  3. 修正日期判断逻辑:读取到Date字段后,先按逗号拆分为单个日期值,转为整数后再和当天的日期(整数)做成员判断,避免子串匹配的误判问题。

修复后的完整代码:

from csv import DictReader
from datetime import date

Living_beings = []
today_day = date.today().day
with open(users_read, 'r') as f:
    # 配置读取规则,自动处理单引号包裹、字段前空格问题
    reader = DictReader(f, quotechar="'", skipinitialspace=True)
    for row in reader:
        # 拆分日期字段为整数列表
        date_nums = [int(num.strip()) for num in row['Date'].split(',')]
        if today_day in date_nums:
            # 追加整个分类名为单个列表元素
            Living_beings.append(row['Category'])
print(Living_beings)

如果运行代码当天为5号或21号,输出结果为:

['Sparrow', 'Penguin']

和预期结果完全一致。

补充说明:如果坚持要用+=实现追加,需要把传入的字符串包装为列表,即写成Living_beings += [row['Category']],但这种写法可读性不如append(),不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:42:14