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")把多行字符串按换行拆成单行列表,同时过滤掉空行、去掉每行首尾的空白字符,避免无效内容干扰 - 表头处理:第一行是字段名,所有值都是字符串,拆分去空格后直接作为表格的第一行
- 双层循环处理数据:
- 外层循环遍历除表头外的所有数据行
- 内层循环遍历当前行的每个字段,按固定规则做类型转换:
- 布尔值判断:手动匹配字符串形式的
"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
相关产品推荐
相关产品推荐

