sas9-execl

SAS系统对Excel文件的访问操作
博客介绍了SAS系统对Excel文件的访问操作。通过代码展示了将Excel文件作为逻辑库使用,对其进行数据处理,如排序等。还提到Excel文件无需预先创建,SAS建立逻辑库时会独占访问该文件,直到提交清除命令。

libname xlstest "c:/excelfile01.xls";
data xlstest.class;
   set sashelp.class;
run;
proc sort data=xlstest.class out=xlstest.class_sort;
   by height;
run;
excelfile01.xls不需要预先创建。SAS系统将会把excelfile01.xls作为一个逻辑库使用,对其进行透明的访问。每个表对应于excel中的一个tab。

SAS在建立这类逻辑库时会对该文件进行独占访问,这时其他程序不能够访问excelfile01.xls,直到你提交
libname xlstest clear;

def get_raid_disk_mapping(session, base_url, auth_token, VERIFY_SSL): headers = {"X-Auth-Token": auth_token} raid_disk_map = {} raid_controller_info = [] # 用于保存 RAID 控制器信息 disk_info_list = [] # 用于保存所有磁盘信息 seen_drives = set() try: # 获取所有磁盘(来自 Chassis 接口) drives_url = f"{base_url}/redfish/v1/Chassis/1/Drives" drives_response = session.get(drives_url, headers=headers, verify=VERIFY_SSL) drives_response.raise_for_status() drives_data = drives_response.json() # 提取磁盘信息 for drive in drives_data.get("Members", []): drive_url = drive['@odata.id'] drive_response = session.get(f"{base_url}{drive_url}", headers=headers, verify=VERIFY_SSL) drive_response.raise_for_status() drive_info = drive_response.json() # print(json.dumps(drive_info, indent=4, ensure_ascii=False)) # 提取关键字段 disk_info = { "PartNumber": drive_info.get("PartNumber"), "CapacityGB": bytes_to_gb(drive_info.get("CapacityBytes")), # 转换为 GB "MediaType": drive_info.get("MediaType") } disk_info_list.append(disk_info) # 打印磁盘信息 print("\n全部磁盘信息:") print(json.dumps(disk_info_list, indent=4, ensure_ascii=False)) # 获取所有 Storage 控制器 storages_url = f"{base_url}/redfish/v1/Systems/1/Storages" storages_response = session.get(storages_url, headers=headers, verify=VERIFY_SSL) storages_response.raise_for_status() storages_data = storages_response.json() # 遍历所有存储控制器,提取 RAID 控制器信息 for storage in storages_data.get("Members", []): storage_url = storage['@odata.id'] storage_response = session.get(f"{base_url}{storage_url}", headers=headers, verify=VERIFY_SSL) storage_response.raise_for_status() storage_info = storage_response.json() # 提取 RAID 控制器的 Name 和 CardModel controllers = storage_info.get("StorageControllers", []) raid_name = storage_info.get("Name") # 从顶层获取 Name for controller in controllers: card_model = controller.get("CardModel") if raid_name and card_model: raid_controller_info.append({ "Name": raid_name, "CardModel": card_model }) # 打印提取的 RAID 控制器信息 print("\n提取的 RAID 控制器名称和型号:") print(json.dumps(raid_controller_info, indent=4, ensure_ascii=False)) except requests.exceptions.RequestException as e: print(f"❌ 获取 RAID 与磁盘映射失败: {e}") return {} return raid_disk_map # 主函数 def main(): # 读取 server.txt 获取 IP 地址列表 try: with open("server.txt", "r", encoding="utf-8") as f: ips = [line.strip() for line in f if line.strip()] except FileNotFoundError: print("❌ 文件 server.txt 不存在,请确保该文件存在并包含 IP 地址。") return new_rows = [] with requests.Session() as session: for ip in ips: base_url = f"https://{ip}" print(f"🔌 正在连接服务器:{ip}") auth_token = login(session, base_url) if not auth_token: print(f"❌ 登录失败:{ip}") new_rows.append({ "IP 地址": ip, "错误信息": "登录失败或服务器不可达" }) continue time.sleep(0.5) ##获取 RAID 类型与磁盘映射 raid_disk_map = get_raid_disk_mapping(session, base_url, auth_token, VERIFY_SSL) raid_index = 1 for raid_type, disks in raid_disk_map.items(): disk_counter = defaultdict(int) for disk in disks: key = (disk.get("CapacityTB"), disk.get("MediaType")) if None not in key: # 避免无效数据 disk_counter[key] += 1 if disk_counter: (capacity, media_type), count = next(iter(disk_counter.items())) base_row[f"RAID类型_{raid_index}"] = raid_type base_row[f"磁盘容量_TB_{raid_index}"] = capacity base_row[f"磁盘类型_{raid_index}"] = media_type base_row[f"磁盘数量_{raid_index}"] = count raid_index += 1 new_rows.append(base_row) # 写入 Excel pd.DataFrame(new_rows).to_excel("Lenovo_hw_info.xlsx", index=False) print("✅ 所有服务器的硬件信息已成功写入 Lenovo_hw_info.xlsx") 请给我修改我的代码,我要做的是raid和磁盘这些字段信息,能够给我正确处理到execl中,"Name": raid_name, "CardModel": card_model disk_info = { "PartNumber": drive_info.get("PartNumber"), "CapacityGB": bytes_to_gb(drive_info.get("CapacityBytes")), # 转换为 GB "MediaType": drive_info.get("MediaType") }
最新发布
10-23
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值