_烟雨_ 2025-01-03 01:52 采纳率: 60%
浏览 9
已结题

在 Python 中,当我们读取一个包含多行数据的文件时,有时需要对每行进行特定的处理。

假设你有一个文本文件 data.txt,内容如下:

Alice,23,Developer
Bob,34,Designer
Charlie,29,Manager

请完成以下任务:

  1. 编写一个函数 parse_file(file_path),接收文件路径作为参数,读取文件内容并返回一个列表,其中每个元素是一个字典,字典的键分别为 nameagejob,对应文件中的每一行。例如,函数运行后应返回:

    [
        {"name": "Alice", "age": 23, "job": "Developer"},
        {"name": "Bob", "age": 34, "job": "Designer"},
        {"name": "Charlie", "age": 29, "job": "Manager"}
    ]
    
  2. 在处理文件时,请注意可能存在以下问题:

    • 文件中某些行数据不完整,例如:Eve,25
    • 某些行可能为空行或者格式错误,例如:John,abc,Teacher

    请确保你的代码能够跳过这些不完整或格式错误的行,并仅处理格式正确的行。


提示:

  • 你可以使用 with open(file_path, 'r') 来读取文件。
  • 考虑使用 try...except 来处理可能的错误。
  • 使用字符串的 split(',') 方法可以方便地分割每一行的数据。
  • 写回答

3条回答 默认 最新

  • 小ᶻ☡꙳ᵃⁱᵍᶜ꙳ 优质创作者: 人工智能技术领域 2025-01-03 01:56
    关注

    以下回答参考GPT-4o

    以下是解决问题的代码实现:

    def parse_file(file_path):
        results = []
        with open(file_path, 'r') as file:
            for line in file:
                line = line.strip()  # 去除首尾空白字符或换行符
                if not line:
                    continue  # 跳过空行
    
                parts = line.split(',')
                if len(parts) != 3:
                    continue  # 跳过数据不完整的行
    
                name, age, job = parts
                try:
                    age = int(age)  # 确保年龄是整数
                except ValueError:
                    continue  # 如果年龄不是数字,跳过该行
    
                results.append({"name": name, "age": age, "job": job})
    
        return results
    
    # 测试代码
    file_path = 'data.txt'  # 假设文件名为 data.txt
    parsed_data = parse_file(file_path)
    print(parsed_data)
    

    解析:

    1. 读取文件:通过 with open(file_path, 'r') 打开文件,确保文件会在使用完毕后正确关闭。
    2. 处理每行数据:使用 strip() 去除多余的空白字符或换行符,并跳过空行。
    3. 分割字符串:使用 split(',') 方法将每行分割为三个部分。
    4. 验证数据完整性:如果分割后的部分数量不是 3(如缺少某项数据),则跳过该行。
    5. 处理异常数据:尝试将年龄转换为整数,如果转换失败(如非数字),则跳过该行。
    6. 组装字典:将合法数据转换为字典并添加到结果列表中。
    7. 返回结果:函数返回一个列表,包含所有处理后的字典数据。

    运行结果(基于示例文件 data.txt):

    [
        {"name": "Alice", "age": 23, "job": "Developer"},
        {"name": "Bob", "age": 34, "job": "Designer"},
        {"name": "Charlie", "age": 29, "job": "Manager"}
    ]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月3日
  • 已采纳回答 1月3日
  • 创建了问题 1月3日