功能介绍
实际是Anroid开发中,想要更清晰查看Http请求中Query Parameters的参数值传递是否有问题,又同时在学习python语言,完成一段Python小程序
实现效果
具体代码实现
import urllib.parse
import sys
from typing import Dict, List
import unicodedata
def 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 width
def 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_dict
def 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_data
def 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()