用Python列表搞定4个实用小工具:数据脱敏、文本统计、密码生成与文件处理 用Python列表搞定4个实用小工具数据脱敏、文本统计、密码生成与文件处理在Python编程中列表(list)是最基础也最强大的数据结构之一。很多初学者在学习列表的基本操作后往往不知道如何将这些知识应用到实际项目中。本文将带你用Python列表开发4个实用小工具从数据脱敏到文件处理让你真正把列表用活。1. 数据脱敏工具开发数据脱敏是保护隐私信息的重要手段。我们可以利用Python列表和字符串操作快速构建一个批量处理个人信息的脱敏工具。1.1 基础脱敏功能实现下面是一个简单的数据脱敏函数可以对姓名、身份证号和手机号进行脱敏处理def desensitize_data(data_list): 对个人信息列表进行脱敏处理 :param data_list: 包含[姓名, 身份证号, 手机号]的列表 :return: 脱敏后的数据列表 # 姓名脱敏保留前1个字后面用*代替 if len(data_list[0]) 1: data_list[0] data_list[0][0] **(len(data_list[0])-1) # 身份证号脱敏保留前4位和后4位 if len(data_list[1]) 18: data_list[1] data_list[1][:4] **10 data_list[1][-4:] # 手机号脱敏保留前3位和后4位 if len(data_list[2]) 11: data_list[2] data_list[2][:3] **4 data_list[2][-4:] return data_list1.2 批量处理与进阶功能实际应用中我们往往需要处理大量数据。下面展示如何批量处理一个包含多条记录的列表def batch_desensitize(records): 批量脱敏处理 :param records: 包含多条记录的列表每条记录是一个包含个人信息的列表 :return: 脱敏后的记录列表 return [desensitize_data(record) for record in records] # 示例数据 sample_data [ [张三, 110105199003072345, 13800138000], [李四, 310115198502143456, 13912345678], [王五, 440305197801234567, 13787654321] ] # 批量脱敏处理 desensitized_data batch_desensitize(sample_data) for data in desensitized_data: print(data)提示在实际项目中可以考虑将脱敏规则配置化使用字典或配置文件存储不同字段的脱敏规则使工具更加灵活。2. 文本统计工具开发文本分析是数据处理中的常见需求。我们可以利用Python列表和字符串方法构建一个功能丰富的文本统计工具。2.1 基础字符统计下面是一个统计文本中各类字符数量的函数def text_statistics(text): 统计文本中的字符类型分布 :param text: 输入文本 :return: 包含各类字符数量的字典 stats { upper: 0, # 大写字母 lower: 0, # 小写字母 digit: 0, # 数字 space: 0, # 空格 punct: 0, # 标点符号 other: 0 # 其他字符 } for char in text: if char.isupper(): stats[upper] 1 elif char.islower(): stats[lower] 1 elif char.isdigit(): stats[digit] 1 elif char.isspace(): stats[space] 1 elif char in ,.!?;:\: stats[punct] 1 else: stats[other] 1 return stats2.2 进阶文本分析功能除了基础统计我们还可以添加更多实用功能def advanced_text_analysis(text): 进阶文本分析 :param text: 输入文本 :return: 包含多种统计结果的字典 # 基础统计 stats text_statistics(text) # 单词统计 words text.split() stats[word_count] len(words) # 句子统计简单版 sentences [s for s in text.split(.) if s.strip()] stats[sentence_count] len(sentences) # 计算平均单词长度 if stats[word_count] 0: avg_word_length sum(len(word) for word in words) / stats[word_count] stats[avg_word_length] round(avg_word_length, 2) else: stats[avg_word_length] 0 return stats3. 密码生成器开发密码生成是另一个实用场景。我们可以利用Python列表和随机模块构建一个灵活的密码生成工具。3.1 基础密码生成import random import string def generate_password(length8, include_upperTrue, include_digitsTrue, include_specialFalse): 生成随机密码 :param length: 密码长度 :param include_upper: 是否包含大写字母 :param include_digits: 是否包含数字 :param include_special: 是否包含特殊字符 :return: 生成的密码 character_sets [] # 必选小写字母 character_sets.append(string.ascii_lowercase) # 可选字符集 if include_upper: character_sets.append(string.ascii_uppercase) if include_digits: character_sets.append(string.digits) if include_special: character_sets.append(!#$%^*()) # 确保密码包含每个选中的字符集至少一个字符 password [] for charset in character_sets: password.append(random.choice(charset)) # 填充剩余长度 all_chars .join(character_sets) password.extend(random.choices(all_chars, klength - len(password))) # 打乱顺序 random.shuffle(password) return .join(password)3.2 批量密码生成与复杂度检查我们可以扩展功能实现批量生成和密码强度检查def generate_multiple_passwords(count5, **kwargs): 生成多个密码 :param count: 密码数量 :param kwargs: 传递给generate_password的参数 :return: 密码列表 return [generate_password(**kwargs) for _ in range(count)] def check_password_strength(password): 检查密码强度 :param password: 待检查密码 :return: 强度评分(0-100) score 0 # 长度加分 length len(password) score min(length * 4, 40) # 最长10字符可得40分 # 字符种类加分 has_upper any(c.isupper() for c in password) has_lower any(c.islower() for c in password) has_digit any(c.isdigit() for c in password) has_special any(not c.isalnum() for c in password) type_count sum([has_upper, has_lower, has_digit, has_special]) score (type_count - 1) * 15 # 每多一种字符类型加15分 return min(score, 100)4. 文件处理工具开发文件处理是日常编程中的常见任务。我们可以利用Python列表和文件操作构建一个多功能文件处理工具。4.1 基础文件操作def process_file(input_file, output_fileNone, operationstats): 文件处理工具 :param input_file: 输入文件路径 :param output_file: 输出文件路径(可选) :param operation: 操作类型(stats, reverse, sort) :return: 根据操作类型返回不同结果 with open(input_file, r, encodingutf-8) as f: lines f.readlines() if operation stats: # 返回文件统计信息 return { line_count: len(lines), word_count: sum(len(line.split()) for line in lines), char_count: sum(len(line) for line in lines) } elif operation reverse: # 反转文件内容 reversed_lines lines[::-1] if output_file: with open(output_file, w, encodingutf-8) as f: f.writelines(reversed_lines) return reversed_lines elif operation sort: # 排序文件内容 sorted_lines sorted(lines) if output_file: with open(output_file, w, encodingutf-8) as f: f.writelines(sorted_lines) return sorted_lines else: raise ValueError(不支持的operation类型)4.2 高级文件处理功能我们可以添加更多实用功能如文件内容过滤、批量处理等def filter_file(input_file, output_file, keywordNone, startswithNone, endswithNone): 过滤文件内容 :param input_file: 输入文件路径 :param output_file: 输出文件路径 :param keyword: 包含的关键词 :param startswith: 以...开头的行 :param endswith: 以...结尾的行 :return: 过滤后的行数 with open(input_file, r, encodingutf-8) as f: lines f.readlines() filtered_lines [] for line in lines: line line.strip() match True if keyword and keyword not in line: match False if startswith and not line.startswith(startswith): match False if endswith and not line.endswith(endswith): match False if match: filtered_lines.append(line \n) with open(output_file, w, encodingutf-8) as f: f.writelines(filtered_lines) return len(filtered_lines) def batch_process_files(file_list, operation, **kwargs): 批量处理文件 :param file_list: 文件路径列表 :param operation: 操作类型 :param kwargs: 传递给处理函数的参数 :return: 处理结果列表 results [] for file_path in file_list: if operation stats: result process_file(file_path, operationstats) elif operation filter: result filter_file(file_path, file_path .filtered, **kwargs) else: result process_file(file_path, file_path .processed, operationoperation) results.append((file_path, result)) return results5. 工具集成与扩展现在我们已经开发了四个实用工具接下来可以考虑将它们集成到一个统一的工具集中或者进一步扩展功能。5.1 创建工具集类我们可以创建一个Python类来整合这些工具class PythonListTools: def __init__(self): self.data_history [] def desensitize(self, data_list, record_historyTrue): result desensitize_data(data_list) if record_history: self.data_history.append((desensitize, data_list, result)) return result def batch_desensitize(self, records, record_historyTrue): results batch_desensitize(records) if record_history: self.data_history.append((batch_desensitize, records, results)) return results def text_stats(self, text, advancedFalse, record_historyTrue): if advanced: result advanced_text_analysis(text) else: result text_statistics(text) if record_history: self.data_history.append((text_stats, text, result)) return result def generate_password(self, length8, **kwargs): return generate_password(lengthlength, **kwargs) def process_file(self, input_file, **kwargs): return process_file(input_file, **kwargs) def get_history(self): return self.data_history5.2 添加新功能示例工具集可以轻松扩展新功能。例如添加一个CSV文件处理工具import csv def csv_to_list(csv_file, delimiter,): 读取CSV文件到列表 :param csv_file: CSV文件路径 :param delimiter: 分隔符 :return: 包含所有行的列表 with open(csv_file, r, encodingutf-8) as f: reader csv.reader(f, delimiterdelimiter) return [row for row in reader] def list_to_csv(data_list, csv_file, delimiter,): 将列表写入CSV文件 :param data_list: 数据列表 :param csv_file: 输出CSV文件路径 :param delimiter: 分隔符 with open(csv_file, w, encodingutf-8, newline) as f: writer csv.writer(f, delimiterdelimiter) writer.writerows(data_list) # 添加到工具集类中 PythonListTools.csv_to_list staticmethod(csv_to_list) PythonListTools.list_to_csv staticmethod(list_to_csv)在实际项目中我发现将这些小工具模块化后可以大大提高开发效率。特别是在处理临时性数据分析任务时这些预先准备好的工具函数可以节省大量重复编码时间。