福田网站建设哪家好滨州建设网站
2026/3/17 23:18:46 网站建设 项目流程
福田网站建设哪家好,滨州建设网站,网站开发 网络工程 哪个好,建设模板网站报价案例一#xff1a;数据处理场景 —— 批量清洗 CSV 文件中的无效数据1. 问题定义与需求拆解核心问题某业务场景下有一批用户信息 CSV 文件#xff08;存储在user_data/目录下#xff09;#xff0c;存在三类无效数据#xff1a;① 关键列#xff08;user_id、phone#…案例一数据处理场景 —— 批量清洗 CSV 文件中的无效数据1. 问题定义与需求拆解核心问题某业务场景下有一批用户信息 CSV 文件存储在user_data/目录下存在三类无效数据① 关键列user_id、phone为空值② 手机号phone不符合 11 位数字格式③ 存在重复user_id的冗余数据。需求目标批量处理user_data/目录下所有 CSV 文件清洗无效数据将每个文件的清洗结果保存到cleaned_user_data/目录保留列结构为user_id,name,phone,register_time并记录清洗日志。2. 信息收集与现状分析收集样本 CSV 文件user_202601.csv部分原始数据如下| user_id | name | phone | register_time ||---------|-------|------------|---------------|| 1001 | 张三 | 13800138000| 2026-01-01 || 1002 | 李四 | | 2026-01-02 || 1003 | 王五 | 1390013800 | 2026-01-03 || 1001 | 张三 | 13800138000| 2026-01-01 || | 赵六 | 13700137000| 2026-01-04 |分析清洗规则① 删除user_id或phone为空的行② 正则验证phone为 11 位纯数字③ 按user_id去重保留第一条记录技术选型评估Python 的pandas库高效处理表格数据os库遍历目录文件re库验证手机号格式方案轻量且易落地。3. 方案实现与完整代码import pandas as pd import re import os from datetime import datetime # 1. 定义基础配置与工具函数 INPUT_DIR user_data OUTPUT_DIR cleaned_user_data LOG_FILE data_cleaning_log.txt # 验证11位手机号的正则表达式 PHONE_PATTERN re.compile(r^1[3-9]\d{9}$) # 定义日志记录函数 def write_log(content): 记录清洗过程日志 current_time datetime.now().strftime(%Y-%m-%d %H:%M:%S) log_content f[{current_time}] {content}\n with open(LOG_FILE, a, encodingutf-8) as f: f.write(log_content) print(log_content.strip()) # 2. 定义单文件数据清洗函数 def clean_single_csv(file_path, output_path): 清洗单个CSV文件 :param file_path: 输入CSV文件路径 :param output_path: 输出清洗后CSV文件路径 try: # 读取CSV文件 df pd.read_csv(file_path, encodingutf-8) original_row_count len(df) write_log(f开始清洗文件{file_path}原始数据行数{original_row_count}) # 步骤1删除user_id或phone为空的行 df df.dropna(subset[user_id, phone]) drop_null_row_count original_row_count - len(df) write_log(f - 删除空值行{drop_null_row_count} 行) # 步骤2验证手机号格式保留符合11位数字的行 df[phone] df[phone].astype(str) # 统一转换为字符串格式 df df[df[phone].apply(lambda x: bool(PHONE_PATTERN.match(x)))] drop_invalid_phone_count original_row_count - drop_null_row_count - len(df) write_log(f - 删除无效手机号行{drop_invalid_phone_count} 行) # 步骤3按user_id去重保留第一条记录 df df.drop_duplicates(subset[user_id], keepfirst) drop_duplicate_row_count original_row_count - drop_null_row_count - drop_invalid_phone_count - len(df) write_log(f - 删除重复user_id行{drop_duplicate_row_count} 行) # 步骤4保存清洗后的数据 os.makedirs(os.path.dirname(output_path), exist_okTrue) df.to_csv(output_path, indexFalse, encodingutf-8) write_log(f清洗完成{output_path}清洗后数据行数{len(df)}\n) except Exception as e: error_msg f清洗文件 {file_path} 失败错误信息{str(e)} write_log(error_msg) # 3. 定义批量处理函数 def batch_clean_csv(): 批量处理INPUT_DIR下的所有CSV文件 # 初始化日志文件 write_log(*50 开始批量数据清洗 *50) # 检查输入目录是否存在 if not os.path.exists(INPUT_DIR): write_log(f输入目录 {INPUT_DIR} 不存在终止清洗) return # 遍历输入目录下的所有CSV文件 for root, dirs, files in os.walk(INPUT_DIR): for file in files: if file.endswith(.csv): # 构建输入与输出文件路径 input_file_path os.path.join(root, file) relative_path os.path.relpath(input_file_path, INPUT_DIR) output_file_path os.path.join(OUTPUT_DIR, relative_path) # 调用单文件清洗函数 clean_single_csv(input_file_path, output_file_path) write_log(*50 批量数据清洗结束 *50) # 4. 执行批量清洗 if __name__ __main__: batch_clean_csv()4. 结果验证与优化迭代1结果验证运行代码前创建user_data/目录并放入样本 CSV 文件运行代码后生成cleaned_user_data/目录存放清洗后文件和data_cleaning_log.txt清洗日志验证核心指标清洗后的文件无空值、手机号格式正确、无重复user_id日志记录完整可追溯。2优化迭代初始版本仅支持utf-8编码 CSV优化后添加gbk编码兼容处理中文乱码问题新增列名校验防止因 CSV 列名不一致导致报错优化去重逻辑支持保留最新记录按register_time排序后去重。三、案例二程序调试场景 —— 排查 Python 平均分计算函数异常1. 问题定义与需求拆解核心问题一个用于计算学生考试平均分的 Python 函数calculate_average()存在两个异常① 输入有效成绩列表[90, 85, 95, 88]计算结果错误② 输入包含非数字的列表[80, 90, 75, 92]直接抛出类型错误。需求目标修复函数逻辑实现① 正确计算非空有效成绩列表0-100 分的平均分保留 2 位小数② 兼容字符串格式的数字如90转换为90③ 对无效输入空列表、非数字、成绩超出 0-100 范围给出友好提示而非直接报错。2. 信息收集与现状分析1原始错误代码def calculate_average(scores): 计算学生成绩平均分 total sum(scores) average total / len(scores) return round(average, 2)2问题排查测试用例 1calculate_average([90, 85, 95, 88])预期结果89.50实际返回错误无语法错误逻辑无问题不若输入包含字符串则报错测试用例 2calculate_average([80, 90, 75, 92])抛出TypeError: unsupported operand type(s) for : int and str原因是无法直接对 int 和 str 求和隐藏问题输入空列表[]会抛出ZeroDivisionError输入成绩105或-5会被正常计算不符合业务规则。3. 方案实现与优化后代码def calculate_average(scores): 计算学生成绩平均分优化版支持容错与数据校验 :param scores: 成绩列表支持int、str格式的有效数字 :return: 平均分保留2位小数或友好错误提示 # 步骤1校验输入是否为空列表 if not isinstance(scores, list): return 错误输入必须为列表类型 if len(scores) 0: return 错误成绩列表不能为空请输入有效成绩 # 步骤2数据清洗与类型转换兼容字符串格式数字 valid_scores [] for score in scores: try: # 转换为浮点数 num_score float(score) # 校验成绩是否在0-100范围内 if 0 num_score 100: valid_scores.append(num_score) else: print(f警告成绩 {score} 超出0-100范围已忽略) except (ValueError, TypeError): print(f警告成绩 {score} 不是有效数字已忽略) # 步骤3校验清洗后是否有有效成绩 if len(valid_scores) 0: return 错误无有效成绩可计算平均分 # 步骤4计算平均分并返回结果 total sum(valid_scores) average total / len(valid_scores) return round(average, 2) # 测试用例验证 if __name__ __main__: test_cases [ [90, 85, 95, 88], [80, 90, 75, 92], [], [105, -5, 90, abc], not a list ] for i, case in enumerate(test_cases, 1): result calculate_average(case) print(f测试用例 {i}输入 {case} → 结果 {result}\n)4. 结果验证与优化迭代1结果验证运行测试用例输出结果如下符合预期需求测试用例 1返回89.50正确计算有效成绩测试用例 2返回84.25兼容字符串数字并转换测试用例 3返回 “错误成绩列表不能为空请输入有效成绩”友好提示空列表测试用例 4忽略无效成绩返回90.0仅计算有效成绩测试用例 5返回 “错误输入必须为列表类型”校验输入类型。2优化迭代初始版本仅打印警告信息优化后新增日志记录便于追溯无效成绩支持自定义成绩范围添加参数min_score、max_score提升函数复用性新增返回值类型统一异常场景返回字典格式{code: -1, msg: 错误信息}成功场景返回{code: 0, data: 89.50}便于后续业务调用。四、计算机问题解决的核心技巧总结重视问题拆解将复杂问题拆分为多个可落地的小任务避免 “胡子眉毛一把抓”比如数据清洗拆分为 “空值处理、格式验证、去重” 三个小步骤善用工具与库站在巨人的肩膀上避免重复造轮子比如数据处理用pandas、正则验证用re、调试用pdb提升解决效率注重日志与测试日志是排查问题的 “线索”完善的测试用例能覆盖边界场景避免上线后出现隐藏问题容错性优先程序设计中要考虑异常场景比如空输入、无效数据给出友好提示而非直接崩溃积累可复用方案将常见问题的解决方法整理为模板如批量文件处理、数据校验后续遇到同类问题可快速复用。五、总结计算机问题的解决核心是建立 “系统化思维” 与 “落地能力” 的结合。通用方法论是指导方向避免盲目试错代码与案例是落地载体验证方案的可行性。无论是数据处理、程序调试还是更复杂的系统运维、算法实现都可以遵循 “定义问题→收集信息→设计方案→落地实现→验证优化” 的流程。随着实践经验的积累你会逐渐形成自己的问题解决体系高效应对各类计算机场景中的挑战。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询