功能介绍
实际是Anroid开发中,想要更清晰查看Http请求中Query Parameters的参数值传递是否有问题,又同时在学习python语言,完成一段Python小程序
实现效果
具体代码实现
import urllib.parseimport sysfrom typing import Dict, Listimport unicodedatadef get_string_width(s: str) -> int: """ 计算字符串的显示宽度,中文字符计为2个宽度,解决对齐问题 参数: s (str): 要计算宽度的字符串 返回: int: 字符串的显示宽度 """ width = 0 for char in s: # 获取字符的东亚宽度属性 if unicodedata.east_asian_width(char) in ('F', 'W', 'A'): width += 2 else: width += 1 return widthdef format_cell(content: str, width: int) -> str: """ 格式化表格单元格,确保对齐 参数: content: 单元格内容 width: 需要的宽度 返回: str: 格式化后的单元格内容 """ content_width = get_string_width(content) padding = width - content_width if padding < 0: padding = 0 content_bytes = content.encode('utf-8') content_display = content_bytes.decode('utf-8') return f" {content_display}{' ' * padding} "def parse_http_get_params(query_string): """ 解析HTTP GET参数字符串,返回参数字典 参数: query_string (str): HTTP GET参数字符串,例如 'param1=value1¶m2=value2' 返回: dict: 参数名称和值的字典 """ # 移除可能存在的问号前缀 if '?' in query_string: query_string = query_string.split('?', 1)[1] # 使用urllib.parse解析参数,保留空值 params_dict = dict(urllib.parse.parse_qsl(query_string, keep_blank_values=True)) return params_dictdef format_params_table(params_dict: Dict[str, str]) -> List[List[str]]: """ 将参数字典转换为表格数据 参数: params_dict (dict): 参数名称和值的字典 返回: list: 包含参数名和参数值的二维列表 """ # 转换为表格数据结构 table_data = [['参数名', '参数值']] # 表头 table_data.extend([[key, str(value)] for key, value in params_dict.items()]) return table_datadef print_table(table_data: List[List[str]]) -> None: """ 打印格式化的表格 参数: table_data: 要打印的表格数据 """ # 计算每列的最大显示宽度 col_widths = [] for i in range(len(table_data[0])): max_width = 0 for row in table_data: width = get_string_width(str(row[i])) max_width = max(max_width, width) col_widths.append(max_width) # 生成分隔线 separator = '+' for width in col_widths: separator += '-' * (width + 2) + '+' # 打印表头 print(separator) header_cells = [format_cell(col, width) for col, width in zip(table_data[0], col_widths)] print('|' + '|'.join(header_cells) + '|') print(separator) # 打印数据行 for row in table_data[1:]: cells = [format_cell(str(cell), width) for cell, width in zip(row, col_widths)] print('|' + '|'.join(cells) + '|') print(separator)def main(): # 检查是否提供了命令行参数 if len(sys.argv) > 1: query_string = sys.argv[1] else: # 如果没有命令行参数,提示用户输入 query_string = input("请输入HTTP 参数字符串: ") # 解析参数 params_dict = parse_http_get_params(query_string) # 转换为表格数据 table_data = format_params_table(params_dict) print("\nHTTP参数表格:") print_table(table_data)if __name__ == "__main__": main()