用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(length=8, include_upper=True, include_digits=True, include_special=False): """ 生成随机密码 :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, k=length - len(password))) # 打乱顺序 random.shuffle(password) return ''.join(password)3.2 批量密码生成与复杂度检查
我们可以扩展功能,实现批量生成和密码强度检查:
def generate_multiple_passwords(count=5, **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_file=None, operation='stats'): """ 文件处理工具 :param input_file: 输入文件路径 :param output_file: 输出文件路径(可选) :param operation: 操作类型(stats, reverse, sort) :return: 根据操作类型返回不同结果 """ with open(input_file, 'r', encoding='utf-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', encoding='utf-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', encoding='utf-8') as f: f.writelines(sorted_lines) return sorted_lines else: raise ValueError("不支持的operation类型")4.2 高级文件处理功能
我们可以添加更多实用功能,如文件内容过滤、批量处理等:
def filter_file(input_file, output_file, keyword=None, startswith=None, endswith=None): """ 过滤文件内容 :param input_file: 输入文件路径 :param output_file: 输出文件路径 :param keyword: 包含的关键词 :param startswith: 以...开头的行 :param endswith: 以...结尾的行 :return: 过滤后的行数 """ with open(input_file, 'r', encoding='utf-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', encoding='utf-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, operation='stats') elif operation == 'filter': result = filter_file(file_path, file_path + '.filtered', **kwargs) else: result = process_file(file_path, file_path + '.processed', operation=operation) results.append((file_path, result)) return results5. 工具集成与扩展
现在我们已经开发了四个实用工具,接下来可以考虑将它们集成到一个统一的工具集中,或者进一步扩展功能。
5.1 创建工具集类
我们可以创建一个Python类来整合这些工具:
class PythonListTools: def __init__(self): self.data_history = [] def desensitize(self, data_list, record_history=True): result = desensitize_data(data_list) if record_history: self.data_history.append(('desensitize', data_list, result)) return result def batch_desensitize(self, records, record_history=True): results = batch_desensitize(records) if record_history: self.data_history.append(('batch_desensitize', records, results)) return results def text_stats(self, text, advanced=False, record_history=True): 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, length=8, **kwargs): return generate_password(length=length, **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', encoding='utf-8') as f: reader = csv.reader(f, delimiter=delimiter) 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', encoding='utf-8', newline='') as f: writer = csv.writer(f, delimiter=delimiter) writer.writerows(data_list) # 添加到工具集类中 PythonListTools.csv_to_list = staticmethod(csv_to_list) PythonListTools.list_to_csv = staticmethod(list_to_csv)在实际项目中,我发现将这些小工具模块化后,可以大大提高开发效率。特别是在处理临时性数据分析任务时,这些预先准备好的工具函数可以节省大量重复编码时间。