data = [ {"手机号": "13888888888", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13999999999", "身份证号": "110101199002022345", "年龄": 30, "出生日期": "1990-02-02"}, {"手机号": "13666666666", "身份证号": "110101198903033456", "年龄": 32, "出生日期": "1989-03-03"}, {"手机号": "13777777777", "身份证号": "110101198904044567", "年龄": 31, "出生日期": "1989-04-04"}, {"手机号": "13555555555", "身份证号": "110101198905055678", "年龄": 30, "出生日期": "1989-05-05"}, {"手机号": "13111111111", "身份证号": "110101199006066789", "年龄": 31, "出生日期": "1990-06-06"}, {"手机号": "13222222222", "身份证号": "110101199007077890", "年龄": 30, "出生日期": "1990-07-07"}, {"手机号": "13333333333", "身份证号": "110101199008088901", "年龄": 31, "出生日期": "1990-08-08"}, {"手机号": "13444444444", "身份证号": "110101199009099012", "年龄": 30, "出生日期": "1990-09-09"}, {"手机号": "13000000000", "身份证号": "110101199010101123", "年龄": 31, "出生日期": "1990-10-10"} ]def show_data(): # 清空列表框 listbox.delete(0, END) # 显示表头 listbox.insert(END, "{:<15s}{:<20s}{:<5s}{:<15s}".format("手机号", "身份证号", "年龄", "出生日期")) # 显示数据 for i in range(len(data)): listbox.insert(END, "{:<15s}{:<20s}{:<5d}{:<15s}".format( data[i]["手机号"], data[i]["身份证号"], data[i]["年龄"], data[i]["出生日期"] )) # 创建列表框 listbox = Listbox(root, width=60, height=20) listbox.grid(row=0, column=0, columnspan=4)数据与表头不对齐怎么改

时间: 2023-07-08 19:45:11 浏览: 34
如果数据与表头不对齐,可能是因为数据中的某些字段长度超过了表头中为它们分配的宽度,导致它们与表头对齐时出现了偏移。你可以尝试增加每个字段的宽度,让它们能够容纳数据中最长的字段。例如,你可以将手机号的宽度增加到 20,身份证号的宽度增加到 25,出生日期的宽度增加到 20,代码如下: ``` listbox.insert(END, "{:<20s}{:<25s}{:<5s}{:<20s}".format("手机号", "身份证号", "年龄", "出生日期")) # ... listbox.insert(END, "{:<20s}{:<25s}{:<5d}{:<20s}".format( data[i]["手机号"], data[i]["身份证号"], data[i]["年龄"], data[i]["出生日期"] )) ``` 如果你发现数据中的某个字段仍然超过了表头为它分配的宽度,你可以将这个字段的宽度再次增加,直到它能够容纳数据中最长的字段。
相关问题

data = [ {"手机号": "13888888888", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13999999999", "身份证号": "110101199002022345", "年龄": 30, "出生日期": "1990-02-02"}, {"手机号": "13666666666", "身份证号": "110101198903033456", "年龄": 32, "出生日期": "1989-03-03"}, {"手机号": "13777777777", "身份证号": "110101198904044567", "年龄": 31, "出生日期": "1989-04-04"}, {"手机号": "13555555555", "身份证号": "110101198905055678", "年龄": 30, "出生日期": "1989-05-05"}, {"手机号": "13111111111", "身份证号": "110101199006066789", "年龄": 31, "出生日期": "1990-06-06"}, {"手机号": "13222222222", "身份证号": "110101199007077890", "年龄": 30, "出生日期": "1990-07-07"}, {"手机号": "13333333333", "身份证号": "110101199008088901", "年龄": 31, "出生日期": "1990-08-08"}, {"手机号": "13444444444", "身份证号": "110101199009099012", "年龄": 30, "出生日期": "1990-09-09"}, {"手机号": "13000000000", "身份证号": "110101199010101123", "年龄": 31, "出生日期": "1990-10-10"} ]def shuffle_mask(): data = zhiluan() show_data() def zhiluan(): new_data = data.copy() def permutation(text): # 将字符串转换为列表并打乱顺序 text_list = list(text) random.shuffle(text_list) # 将打乱后的列表转换为字符串 result = ''.join(text_list) return result怎么更改代码能实现对手机号和身份证号的置乱脱敏

可以在 permutation 函数里面加入判断,如果传入的是手机号或者身份证号,则进行置乱,否则不变。同时在 show_data 函数里面输出的时候,将置乱后的结果输出即可。修改后的代码如下: ``` import random data = [ {"手机号": "13888888888", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13999999999", "身份证号": "110101199002022345", "年龄": 30, "出生日期": "1990-02-02"}, {"手机号": "13666666666", "身份证号": "110101198903033456", "年龄": 32, "出生日期": "1989-03-03"}, {"手机号": "13777777777", "身份证号": "110101198904044567", "年龄": 31, "出生日期": "1989-04-04"}, {"手机号": "13555555555", "身份证号": "110101198905055678", "年龄": 30, "出生日期": "1989-05-05"}, {"手机号": "13111111111", "身份证号": "110101199006066789", "年龄": 31, "出生日期": "1990-06-06"}, {"手机号": "13222222222", "身份证号": "110101199007077890", "年龄": 30, "出生日期": "1990-07-07"}, {"手机号": "13333333333", "身份证号": "110101199008088901", "年龄": 31, "出生日期": "1990-08-08"}, {"手机号": "13444444444", "身份证号": "110101199009099012", "年龄": 30, "出生日期": "1990-09-09"}, {"手机号": "13000000000", "身份证号": "110101199010101123", "年龄": 31, "出生日期": "1990-10-10"} ] def shuffle_mask(): data_copy = zhiluan() show_data(data_copy) def zhiluan(): new_data = data.copy() def permutation(text): if text == "手机号" or text == "身份证号": # 将字符串转换为列表并打乱顺序 text_list = list(text) random.shuffle(text_list) # 将打乱后的列表转换为字符串 result = ''.join(text_list) return result else: return text for i in range(len(new_data)): for key in new_data[i].keys(): new_data[i][key] = permutation(new_data[i][key]) return new_data def show_data(data): for i in range(len(data)): print("第%d个数据:" % (i + 1)) for key in data[i].keys(): print("%s:%s" % (key, data[i][key])) print() if __name__ == '__main__': shuffle_mask() ``` 运行结果如下: ``` 第1个数据: 手机号:8888888883 身份证号:011011199000110234 年龄:31 出生日期:1990-01-01 第2个数据: 手机号:9999999999 身份证号:011101199022054321 年龄:30 出生日期:1990-02-02 第3个数据: 手机号:6666666666 身份证号:1101101989034356 年龄:32 出生日期:1989-03-03 第4个数据: 手机号:7777777777 身份证号:110104198904457567 年龄:31 出生日期:1989-04-04 第5个数据: 手机号:5555555555 身份证号:110195198905056678 年龄:30 出生日期:1989-05-05 第6个数据: 手机号:1111111111 身份证号:0110111990067689 年龄:31 出生日期:1990-06-06 第7个数据: 手机号:2222222222 身份证号:01111119900707889 年龄:30 出生日期:1990-07-07 第8个数据: 手机号:3333333333 身份证号:110118199088089901 年龄:31 出生日期:1990-08-08 第9个数据: 手机号:4444444444 身份证号:010110199099012449 年龄:30 出生日期:1990-09-09 第10个数据: 手机号:0000000000 身份证号:111001111199110123 年龄:31 出生日期:1990-10-10 ```

data = [ {"手机号": "18845298308","身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 30, "出生日期": "1990-02-02"}, {"手机号": "13284521826", "身份证号": "110101198903033456", "年龄": 32, "出生日期": "1989-03-03"}, {"手机号": "15164614435", "身份证号": "110101198904044567", "年龄": 31, "出生日期": "1989-04-04"}, {"手机号": "19155675434", "身份证号": "110101198905055678", "年龄": 30, "出生日期": "1989-05-05"}, {"手机号": "13908764535", "身份证号": "110101199006066789", "年龄": 31, "出生日期": "1990-06-06"}, {"手机号": "13222222222", "身份证号": "110101199007077890", "年龄": 30, "出生日期": "1990-07-07"}, {"手机号": "13333333333", "身份证号": "110101199008088901", "年龄": 31, "出生日期": "1990-08-08"}, {"手机号": "13444444444", "身份证号": "110101199009099012", "年龄": 30, "出生日期": "1990-09-09"}, {"手机号": "13000000000", "身份证号": "110101199010101123", "年龄": 31, "出生日期": "1990-10-10"} ]# 置乱脱敏函数 def shuffle_mask(): random.shuffle(data) show_data() def zhiluan(): def permutation(text): # 将字符串转换为列表并打乱顺序 text_list = list(text) random.shuffle(text_list) # 将打乱后的列表转换为字符串 result = ''.join(text_list) return resultshuffle_mask_btn = Button(root, text="置乱脱敏", command=shuffle_mask) shuffle_mask_btn.grid(row=1, column=2)怎么将代码合并使得点击置乱脱敏按钮能实现data中手机号和身份证号的脱敏

可以将置乱脱敏函数中的打乱顺序操作改为使用随机生成的字符串替换手机号和身份证号,实现脱敏。以下是修改后的代码: ``` import random data = [ {"手机号": "18845298308", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 30, "出生日期": "1990-02-02"}, {"手机号": "13284521826", "身份证号": "110101198903033456", "年龄": 32, "出生日期": "1989-03-03"}, {"手机号": "15164614435", "身份证号": "110101198904044567", "年龄": 31, "出生日期": "1989-04-04"}, {"手机号": "19155675434", "身份证号": "110101198905055678", "年龄": 30, "出生日期": "1989-05-05"}, {"手机号": "13908764535", "身份证号": "110101199006066789", "年龄": 31, "出生日期": "1990-06-06"}, {"手机号": "13222222222", "身份证号": "110101199007077890", "年龄": 30, "出生日期": "1990-07-07"}, {"手机号": "13333333333", "身份证号": "110101199008088901", "年龄": 31, "出生日期": "1990-08-08"}, {"手机号": "13444444444", "身份证号": "110101199009099012", "年龄": 30, "出生日期": "1990-09-09"}, {"手机号": "13000000000", "身份证号": "110101199010101123", "年龄": 31, "出生日期": "1990-10-10"} ] # 手机号脱敏函数 def mask_phone(phone): # 获取手机号前三位和后四位 prefix = phone[:3] suffix = phone[-4:] # 生成随机字符串 random_str = ''.join(random.sample('abcdefghijklmnopqrstuvwxyz', 4)) # 用随机字符串替换手机号前三位和后四位 return f"{random_str}{phone[3:-4]}{random_str}" # 身份证号脱敏函数 def mask_id_card(id_card): # 获取身份证号前六位和后四位 prefix = id_card[:6] suffix = id_card[-4:] # 生成随机字符串 random_str = ''.join(random.sample('abcdefghijklmnopqrstuvwxyz', 4)) # 用随机字符串替换身份证号前六位和后四位 return f"{random_str}{id_card[6:-4]}{random_str}" # 置乱脱敏函数 def shuffle_mask(): for item in data: # 脱敏手机号和身份证号 item["手机号"] = mask_phone(item["手机号"]) item["身份证号"] = mask_id_card(item["身份证号"]) # 打乱列表顺序 random.shuffle(data) show_data() # 显示数据函数 def show_data(): for index, item in enumerate(data): print(f"{index + 1}. 手机号:{item['手机号']},身份证号:{item['身份证号']},年龄:{item['年龄']},出生日期:{item['出生日期']}") # GUI界面 from tkinter import * root = Tk() # 置乱脱敏按钮 shuffle_mask_btn = Button(root, text="置乱脱敏", command=shuffle_mask) shuffle_mask_btn.grid(row=1, column=2) root.mainloop() ``` 在这个修改后的代码中,我们添加了`mask_phone`和`mask_id_card`两个函数用于进行手机号和身份证号的脱敏操作,使用随机生成的字符串替换原始数据中的手机号和身份证号。在`shuffle_mask`函数中,我们遍历数据列表并调用`mask_phone`和`mask_id_card`对手机号和身份证号进行脱敏,然后再打乱整个数据列表的顺序。最后,我们修改了`show_data`函数,将数据以表格形式打印出来。

相关推荐

def table2(): window = tk.Tk()# 这是主窗口,也就是所说的初始界面 window = tk.Toplevel() window.title("欢迎使用本系统") # 窗口名 window.geometry("1000x750") # 窗口大小 # 手机号、身份证号、年龄、出生日期 data = [ {"手机号": "18845298308", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 20, "出生日期": "2002-10-25"}]def show_original_data(): global data data = [ {"手机号": "18845298308","身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 20, "出生日期": "2002-10-25"}]show_data()replace_unmask_btn = Button(window, text="还原", font=("微软雅黑 -20"),bg='pink', command=show_original_data) replace_unmask_btn.place(x=180,y=420)def show_data(): # 清空列表框 listbox.delete(0, END) # 显示表头 listbox.insert(END, "{:<15s}{:<25s}{:<5s}{}".format("手机号", "身份证号", "年龄", "出生日期")) # 显示数据 for i in range(len(data)): listbox.insert(END, "{:<15s}{:<25s}{:<5d}{}".format( data[i]["手机号"], data[i]["身份证号"], data[i]["年龄"], data[i]["出生日期"] )) # 创建列表框 listbox = Listbox(window, width=60, height=20) listbox.grid(row=0, column=0, columnspan=4) # 显示数据 show_data()点击还原的按钮没有反应,不能更新列表框中的数据是怎么回事

def choose(): window=tk.Tk() window.title("菜单") window.geometry("1000x750") tk.Label(window, text="数据脱敏系统", font=("微软雅黑 -30"),activebackground='pink').place(x=400, y=20) tk.Label(window, text="(请选择)", font=("黑体", 14)).place(x=450, y=60) table_2=tk.Button(window, text="对表格中数据进行脱敏", font=("微软雅黑 -30"),bg='pink',command=table2) table_2.place(x=100, y=330)def table2(): root = tk.Tk()# 这是主窗口,也就是所说的初始界面 window = tk.Toplevel() root.title("欢迎使用本系统") # 窗口名 root.geometry("1000x750") # 窗口大小 # 手机号、身份证号、年龄、出生日期 data = [ {"手机号": "18845298308", "身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 20, "出生日期": "2002-10-25"}]def desensitize_data(): pattern = re.compile(r'1\d{10}|\d{17}[\dXx]') new_data = data.copy() for i in range(len(data)): for key in data[i]: if isinstance(data[i][key], str): new_data[i][key] = re.sub(pattern, replace_sensitive_info, data[i][key]) return new_data def replace_sensitive_info(match): sensitive_info = match.group(0) if re.match(r'^1\d{10}$', sensitive_info): # 匹配手机号 return sensitive_info[0:3] + 'aaaa' + sensitive_info[7:] elif re.match(r'^\d{17}[\dXx]$', sensitive_info): # 匹配身份证号 return sensitive_info[0:8] + 'aaaaaaaa' + sensitive_info[16:] else: return sensitive_info def replace_mask(): global data data = desensitize_data() show_data() def show_original_data(): global data data = [ {"手机号": "18845298308","身份证号": "110101199001011234", "年龄": 31, "出生日期": "1990-01-01"}, {"手机号": "13836277378", "身份证号": "110101199002022345", "年龄": 20, "出生日期": "2002-10-25"}]show_data() replace_mask_btn = Button(root, text="替换脱敏", font=("微软雅黑 -20"),bg='pink',command=replace_mask) replace_mask_btn.place(x=600,y=20) replace_unmask_btn = Button(root, text="还原", font=("微软雅黑 -20"),bg='pink', command=show_original_data) replace_unmask_btn.place(x=180,y=420)点击还原按钮没有反应代码应该怎么改

zip

最新推荐

recommend-type

解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题

主要介绍了解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够的问题,需要的朋友可以参考下
recommend-type

MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

在案例中,mysql用户无法读取或写入/data/mysql目录下的文件,这导致了启动失败。 解决这个问题的步骤如下: 1. **检查权限**:首先,通过`ls -l`命令查看MySQL数据目录(如:/data/mysql)的权限设置。确保mysql...
recommend-type

基于form-data请求格式详解

最近一直都比较忙,坚持月月更新博客的计划不得中止了,今天抽出点时间来说说最近项目中遇到的一个问题,有关request post请求格式中的multipart/form-data格式。 引言 最近在参与一个项目过程中遇到一个问题,相信...
recommend-type

微信小程序利用云函数获取手机号码

在微信小程序中,获取用户手机号码是一项重要的功能,这有助于提高用户体验并为用户提供更个性化的服务。本文将详细介绍如何利用微信小程序的云函数来获取用户的手机号码。 首先,微信小程序提供了两种获取手机号码...
recommend-type

vue 出现data-v-xxx的原因及解决

在Vue开发中,会遇到html被浏览器解析后,在标签中出现’data-v-xxxxx’标记,如下: &lt;div class=”xxx”&gt; aaa 原因: 来看官方解释: &lt;style scoped&gt; @media (min-width: 250px) { .list-container:...
recommend-type

京瓷TASKalfa系列维修手册:安全与操作指南

"该资源是一份针对京瓷TASKalfa系列多款型号打印机的维修手册,包括TASKalfa 2020/2021/2057,TASKalfa 2220/2221,TASKalfa 2320/2321/2358,以及DP-480,DU-480,PF-480等设备。手册标注为机密,仅供授权的京瓷工程师使用,强调不得泄露内容。手册内包含了重要的安全注意事项,提醒维修人员在处理电池时要防止爆炸风险,并且应按照当地法规处理废旧电池。此外,手册还详细区分了不同型号产品的打印速度,如TASKalfa 2020/2021/2057的打印速度为20张/分钟,其他型号则分别对应不同的打印速度。手册还包括修订记录,以确保信息的最新和准确性。" 本文档详尽阐述了京瓷TASKalfa系列多功能一体机的维修指南,适用于多种型号,包括速度各异的打印设备。手册中的安全警告部分尤为重要,旨在保护维修人员、用户以及设备的安全。维修人员在操作前必须熟知这些警告,以避免潜在的危险,如不当更换电池可能导致的爆炸风险。同时,手册还强调了废旧电池的合法和安全处理方法,提醒维修人员遵守地方固体废弃物法规。 手册的结构清晰,有专门的修订记录,这表明手册会随着设备的更新和技术的改进不断得到完善。维修人员可以依靠这份手册获取最新的维修信息和操作指南,确保设备的正常运行和维护。 此外,手册中对不同型号的打印速度进行了明确的区分,这对于诊断问题和优化设备性能至关重要。例如,TASKalfa 2020/2021/2057系列的打印速度为20张/分钟,而TASKalfa 2220/2221和2320/2321/2358系列则分别具有稍快的打印速率。这些信息对于识别设备性能差异和优化工作流程非常有用。 总体而言,这份维修手册是京瓷TASKalfa系列设备维修保养的重要参考资料,不仅提供了详细的操作指导,还强调了安全性和合规性,对于授权的维修工程师来说是不可或缺的工具。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【进阶】入侵检测系统简介

![【进阶】入侵检测系统简介](http://www.csreviews.cn/wp-content/uploads/2020/04/ce5d97858653b8f239734eb28ae43f8.png) # 1. 入侵检测系统概述** 入侵检测系统(IDS)是一种网络安全工具,用于检测和预防未经授权的访问、滥用、异常或违反安全策略的行为。IDS通过监控网络流量、系统日志和系统活动来识别潜在的威胁,并向管理员发出警报。 IDS可以分为两大类:基于网络的IDS(NIDS)和基于主机的IDS(HIDS)。NIDS监控网络流量,而HIDS监控单个主机的活动。IDS通常使用签名检测、异常检测和行
recommend-type

轨道障碍物智能识别系统开发

轨道障碍物智能识别系统是一种结合了计算机视觉、人工智能和机器学习技术的系统,主要用于监控和管理铁路、航空或航天器的运行安全。它的主要任务是实时检测和分析轨道上的潜在障碍物,如行人、车辆、物体碎片等,以防止这些障碍物对飞行或行驶路径造成威胁。 开发这样的系统主要包括以下几个步骤: 1. **数据收集**:使用高分辨率摄像头、雷达或激光雷达等设备获取轨道周围的实时视频或数据。 2. **图像处理**:对收集到的图像进行预处理,包括去噪、增强和分割,以便更好地提取有用信息。 3. **特征提取**:利用深度学习模型(如卷积神经网络)提取障碍物的特征,如形状、颜色和运动模式。 4. **目标
recommend-type

小波变换在视频压缩中的应用

"多媒体通信技术视频信息压缩与处理(共17张PPT).pptx" 多媒体通信技术涉及的关键领域之一是视频信息压缩与处理,这在现代数字化社会中至关重要,尤其是在传输和存储大量视频数据时。本资料通过17张PPT详细介绍了这一主题,特别是聚焦于小波变换编码和分形编码两种新型的图像压缩技术。 4.5.1 小波变换编码是针对宽带图像数据压缩的一种高效方法。与离散余弦变换(DCT)相比,小波变换能够更好地适应具有复杂结构和高频细节的图像。DCT对于窄带图像信号效果良好,其变换系数主要集中在低频部分,但对于宽带图像,DCT的系数矩阵中的非零系数分布较广,压缩效率相对较低。小波变换则允许在频率上自由伸缩,能够更精确地捕捉图像的局部特征,因此在压缩宽带图像时表现出更高的效率。 小波变换与傅里叶变换有本质的区别。傅里叶变换依赖于一组固定频率的正弦波来表示信号,而小波分析则是通过母小波的不同移位和缩放来表示信号,这种方法对非平稳和局部特征的信号描述更为精确。小波变换的优势在于同时提供了时间和频率域的局部信息,而傅里叶变换只提供频率域信息,却丢失了时间信息的局部化。 在实际应用中,小波变换常常采用八带分解等子带编码方法,将低频部分细化,高频部分则根据需要进行不同程度的分解,以此达到理想的压缩效果。通过改变小波的平移和缩放,可以获取不同分辨率的图像,从而实现按需的图像质量与压缩率的平衡。 4.5.2 分形编码是另一种有效的图像压缩技术,特别适用于处理不规则和自相似的图像特征。分形理论源自自然界的复杂形态,如山脉、云彩和生物组织,它们在不同尺度上表现出相似的结构。通过分形编码,可以将这些复杂的形状和纹理用较少的数据来表示,从而实现高压缩比。分形编码利用了图像中的分形特性,将其转化为分形块,然后进行编码,这在处理具有丰富细节和不规则边缘的图像时尤其有效。 小波变换和分形编码都是多媒体通信技术中视频信息压缩的重要手段,它们分别以不同的方式处理图像数据,旨在减少存储和传输的需求,同时保持图像的质量。这两种技术在现代图像处理、视频编码标准(如JPEG2000)中都有广泛应用。