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

Python不使用字典实现字符串数据集转列表嵌套表格及类型转换

多行逗号分隔字符串转嵌套列表实现

可运行完整代码

def csv_str_to_table(raw_str):
    # 拆分所有行,过滤空行和首尾空白
    lines = [line.strip() for line in raw_str.split("\n") if line.strip()]
    table = []
    
    # 处理表头行(所有字段均为字符串,无需类型转换)
    header = [col.strip() for col in lines[0].split(",")]
    table.append(header)
    
    # 循环遍历每一条数据行
    for line in lines[1:]:
        # 拆分当前行的每个字段,去掉前后空格
        raw_cols = [col.strip() for col in line.split(",")]
        processed_cols = []
        
        # 循环处理当前行的每个字段,做类型转换
        for col_val in raw_cols:
            # 优先判断布尔值,避免直接用bool()转换的坑
            if col_val == "True":
                processed_cols.append(True)
            elif col_val == "False":
                processed_cols.append(False)
            else:
                # 尝试转整数,失败则转浮点数,都失败则保留字符串
                try:
                    processed_cols.append(int(col_val))
                except ValueError:
                    try:
                        processed_cols.append(float(col_val))
                    except ValueError:
                        processed_cols.append(col_val)
        
        table.append(processed_cols)
    
    return table

# 原始数据集(注意不要用list作为变量名,它是Python内置关键字)
raw_dataset = """ID, Color, Brand, Price, Outstanding, Type
02, Blue, Audi, 200.12, True, 2
06, Red, BMW, 2357.13, True, 1
13, Black, Ford, 252676.12, False, 5"""

# 调用函数得到处理后的嵌套列表表格
result_table = csv_str_to_table(raw_dataset)

# 打印验证结果
for row in result_table:
    print(row)

逻辑拆解(适配初学者理解)

  • 行预处理:用split("\n")把多行字符串按换行拆成单行列表,同时过滤掉空行、去掉每行首尾的空白字符,避免无效内容干扰
  • 表头处理:第一行是字段名,所有值都是字符串,拆分去空格后直接作为表格的第一行
  • 双层循环处理数据:
    1. 外层循环遍历除表头外的所有数据行
    2. 内层循环遍历当前行的每个字段,按固定规则做类型转换:
      • 布尔值判断:手动匹配字符串形式的"True"/"False",转成Python原生布尔类型。特别注意不能直接用bool(col_val)转换,因为所有非空字符串都会被判定为True,会导致字符串"False"被误判为布尔真
      • 数值类型转换:先尝试转整数,失败再尝试转浮点数,适配价格、编号这类数值字段
      • 文本类型保留:以上转换都失败的话,直接保留原字符串,适配颜色、品牌这类文本字段

运行输出示例

['ID', 'Color', 'Brand', 'Price', 'Outstanding', 'Type']
[2, 'Blue', 'Audi', 200.12, True, 2]
[6, 'Red', 'BMW', 2357.13, True, 1]
[13, 'Black', 'Ford', 252676.12, False, 5]

自定义调整说明

当前逻辑会把ID字段的字符串转成整数,丢失前导零(比如原始的"02"会变成2)。如果需要保留ID的前导零作为固定编号,只需要在字段转换的循环开头加判断,直接保留ID字段的字符串即可:

# 加在内层字段循环的最开头
if len(processed_cols) == 0: # 当前字段是每行第一个元素(ID列)
    processed_cols.append(col_val)
    continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 14:24:06