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

不使用Python CSV模块处理CSV数据:生成含None的结构化元组列表

解决方案:处理CSV数据并生成结构化元组列表

我来帮你把这个CSV处理功能完善好,分两部分解决你的需求,同时补全你写的代码片段:

一、需求1:不使用CSV模块导入CSV,返回字符串/整数类型列表

首先实现一个函数,读取CSV文件后分别返回两个列表:一个保留所有元素的字符串类型(空值替换为None),另一个将可转换为整数的元素转为整数(空值和无法转换的元素设为None)。

def load_csv_as_lists(file_path):
    string_rows = []
    integer_rows = []
    
    with open(file_path, 'r') as file:
        for line in file:
            # 分割每行,保留空元素(对应CSV中的空值)
            raw_elements = line.strip().split(' ')
            str_row = []
            int_row = []
            
            for elem in raw_elements:
                # 处理字符串行:空元素转None,否则保留原字符串
                str_row.append(elem if elem else None)
                
                # 处理整数行:尝试转整数,失败/空元素则为None
                if not elem:
                    int_row.append(None)
                else:
                    try:
                        int_row.append(int(elem))
                    except ValueError:
                        int_row.append(None)
            
            string_rows.append(str_row)
            integer_rows.append(int_row)
    
    return string_rows, integer_rows

使用示例

# 调用函数
str_list, int_list = load_csv_as_lists("your_student_file.csv")

# 打印结果
print("字符串类型列表:")
for row in str_list:
    print(row)

print("\n整数类型列表:")
for row in int_list:
    print(row)

二、需求2:生成指定格式的结构化元组列表

接下来完善你写的student_mark函数,实现将CSV数据转换为(姓名, 分数1, 分数2, 分数3, 分数4, 分数5)格式的元组列表,满足:

  • 姓名用双引号包裹
  • 空值替换为None
  • 分数自动转为整数
def student_mark(studentfile):
    result_tuples = []
    
    with open(studentfile, 'r') as file:
        for line in file:
            raw_elements = line.strip().split(' ')
            student_name = None
            scores = []
            
            # 遍历元素,提取姓名和分数
            for elem in raw_elements:
                # 第一个非空元素作为姓名,包裹双引号
                if not student_name and elem:
                    student_name = f'"{elem}"'
                else:
                    # 处理分数:空元素转None,非空转整数
                    if elem:
                        try:
                            scores.append(int(elem))
                        except ValueError:
                            scores.append(None)
                    else:
                        scores.append(None)
            
            # 确保分数列表长度为5,不足补None,多余截断
            while len(scores) < 5:
                scores.append(None)
            scores = scores[:5]
            
            # 构造元组并加入结果
            student_tuple = (student_name,) + tuple(scores)
            result_tuples.append(student_tuple)
    
    return result_tuples

使用示例

假设你的CSV文件内容为:

Jim 57  83 55 78
John  98 91 80  
Michael 61  88 80 60

调用函数后会返回:

[('"Jim"', 57, None, 83, 55, 78), ('"John"', None, 98, 91, 80, None), ('"Michael"', 61, None, 88, 80, 60)]

完全符合你给出的示例格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:18:03