已从Linux服务器获取用户名列表,如何用Python实现后续处理?
我来帮你梳理下怎么处理从Linux服务器获取的用户名列表,基于你提供的代码,这里有几个实用的技术方案,涵盖代码优化、常见处理功能这些场景:
一、优化基础获取代码
首先先把你原有的代码优化得更健壮,适配Python3环境(原代码是Python2语法),同时直接得到结构化的用户名列表,方便后续处理:
#!/usr/bin/env python3 import subprocess def get_user_list(): try: # 使用check_output替代Popen,更简洁且自动处理命令执行异常 output = subprocess.check_output(['ls', '/home/ADILSTU'], universal_newlines=True) # 按行分割并过滤空行,得到干净的用户名列表 user_list = [user.strip() for user in output.splitlines() if user.strip()] return user_list except subprocess.CalledProcessError as e: print(f"获取用户列表失败: {e}") return [] except FileNotFoundError: print("目标目录/home/ADILSTU不存在") return [] # 获取并存储用户名列表 information = get_user_list()
二、常见功能处理方案
基于上面得到的information用户名列表,以下是几个高频场景的处理方法:
1. 筛选特定规则的用户名
比如筛选符合特定格式的用户(以指定字符开头、包含数字、长度达标等):
# 筛选以"j"开头的用户(不区分大小写) j_start_users = [user for user in information if user.lower().startswith('j')] # 筛选包含数字的用户 users_with_digits = [user for user in information if any(char.isdigit() for char in user)] # 筛选长度大于5的用户名 long_username_users = [user for user in information if len(user) > 5]
2. 统计与分析用户数据
可以快速统计用户总数、用户名特征分布:
from collections import Counter # 统计总用户数 total_users = len(information) print(f"总用户数:{total_users}") # 统计用户名长度的分布情况 length_distribution = Counter(len(user) for user in information) print("用户名长度分布:", length_distribution) # 统计用户名首字母的分布(不区分大小写) first_letter_distribution = Counter(user[0].lower() for user in information) print("首字母分布:", first_letter_distribution)
3. 保存处理结果到文件
把用户名列表保存到文本或CSV文件,方便后续离线查看或用Excel等工具分析:
# 保存为每行一个用户名的文本文件 with open('user_list.txt', 'w') as f: f.write('\n'.join(information)) # 保存为CSV文件(带表头,适合表格工具处理) import csv with open('user_list.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['Username']) # 写入表头 for user in information: writer.writerow([user])
4. 批量执行针对用户的操作
比如批量查询每个用户主目录的大小(需要服务器权限):
def get_home_size(username): try: # 用du命令获取目录总大小,-s汇总,-h输出人类可读格式 size_info = subprocess.check_output(['du', '-sh', f'/home/ADILSTU/{username}'], universal_newlines=True) return size_info.split()[0] except subprocess.CalledProcessError: return "权限不足或目录不存在" # 批量生成用户-目录大小的字典 user_size_map = {user: get_home_size(user) for user in information} for user, size in user_size_map.items(): print(f"用户 {user} 的主目录大小:{size}")
内容的提问来源于stack exchange,提问作者rippleEffect
相关产品推荐
相关产品推荐

