我使用 Python 自动化 XML 字段检查的那一天

我使用 python 自动化 xml 字段检查的那一天

这一切都始于我接受检查多个 xml 文件是否缺少字段的任务。在我们继续下一步之前,团队需要确保这些文件中存在所有必填字段。听起来很简单,对吧?嗯,不完全是。

我打开第一个 xml 文件,扫描属性,手动查找必填字段,然后勾选相应的框。正如你所预料的那样,很快就会感到疲倦。在一个文件中只看了几分钟后,我的眼睛变得呆滞,我没有真正的信心我没有错过一些重要的事情。我的意思是,xml 可能非常挑剔,单个缺失字段可能会导致严重问题。

我有一种令人痛苦的恐惧感,因为我知道我还有一堆文件需要处理。当然,准确性至关重要——一个被忽视的缺失字段可能会带来灾难。因此,经过几次深呼吸和思考片刻后,我决定必须有更好的方法来解决这个问题。

顿悟:自动化来救援

作为一名程序员,我有一个想法:为什么不写一个脚本来为我完成这项单调的工作呢?我可以将其自动化并保证准确性,同时在过程中保持理智,而不是手动检查每个字段。是时候利用 python 的力量了。

立即学习“Python免费学习笔记(深入)”;

这个概念很简单:

我将必填字段列表存储在 json 文件中,这使得脚本具有高度的可重用性和适应性。通过使用这种方法,脚本可以轻松处理其他 xml 文件,甚至是那些具有不同结构的文件。您只需使用任何新 xml 格式的所需字段更新 json 文件,即可让脚本自动调整为不同的 xml 模式而无需修改。我需要编写一个 python 脚本来遍历每个 xml 文件,检查是否缺少任何必填字段,然后输出摘要。

这样,我可以轻松识别每个文件中缺少某个字段的次数、存在多少个属性,并获得清晰的报告 – 不再需要无休止的手动检查,不再出现错误。这是我的做法。

编写实用程序脚本

首先,我需要加载必填字段的列表。这些存储在键 required_fields 下的 json 文件中,因此我编写了一个函数来读取此文件:

import osimport jsonimport xml.etree.elementtree as etdef load_required_fields(json_file_path):    with open(json_file_path, 'r') as file:        data = json.load(file)        return data.get("required_fields", [])

然后真正的魔法来了。我编写了一个函数来解析每个 xml 文件,循环遍历其属性,并检查每个必填字段是否存在:

def check_missing_fields(file_path, required_fields):    # load the xml file    tree = et.parse(file_path)    root = tree.getroot()    # initialize variables to store counts and track missing fields    total_properties = 0    missing_fields_counts = {field: 0 for field in required_fields}    # loop through each property to check for missing fields    for property in root.findall('.//property'):        total_properties += 1        for field in required_fields:            # use the find() method to look for direct children of the property element            element = property.find(f'./{field}')            # check if the field is completely missing (not present)            if element is none:                missing_fields_counts[field] += 1    # print the results    print('-----------------------------------------')    print(f'file: {os.path.basename(file_path)}')    print(f'total number of properties: {total_properties}')    print('number of properties missing each field:')    for field, count in missing_fields_counts.items():        print(f'  {field}: {count} properties')    print('-----------------------------------------')

此函数加载 xml 文件,计算属性数量,并跟踪每个必填字段缺少多少属性。该函数打印出一份报告,显示每个文件处理的结果。

最后,我将所有内容放在 main() 函数中。它将迭代指定目录中的所有 xml 文件并对每个文件运行字段检查函数:

def main():    # directory containing xml files    xml_dir = 'xmls'    json_file_path = 'required_fields.json'    # load required fields from json file    required_fields = load_required_fields(json_file_path)    # iterate over each file in the xmls directory    for file_name in os.listdir(xml_dir):        if file_name.endswith('.xml'):            file_path = os.path.join(xml_dir, file_name)            check_missing_fields(file_path, required_fields)if __name__ == "__main__":    main()

运行该过程后,您将收到与此类似的结果摘要:

File: properties.xmlTotal number of properties: 4170Number of properties missing each field:  Title: 0 properties  Unit_Number: 0 properties  Type: 0 properties  Bedrooms: 0 properties  Bathrooms: 0 properties  Project: 0 properties  Price: 0 properties  VAT: 0 properties  Status: 10 properties  Area: 0 properties  Location: 100 properties  Latitude: 30 properties  Longitude: 0 properties  Apartment_Floor: 0 properties  Block: 0 properties  Phase: 0 properties  Construction_Stage: 0 properties  Plot_Size: 0 properties  Yard: 120 properties  Description: 0 properties  gallery: 27 properties

结果:保持理智

一切准备就绪后,我就在 xml 文件目录上运行脚本。输出正是我所需要的:一个简洁的摘要,显示每个文件中有多少属性缺少哪些字段,以及每个 xml 中的属性总数。

我无需花费数小时手动检查每个文件,而是在几秒钟内得到答案。该脚本捕获了几个丢失的字段,如果我继续手动路线,我可能会忽略这些字段。

经验教训

自动化是救星:每当您面临重复性任务时,请考虑如何将它们自动化。它不仅可以节省您的时间,还可以降低人为错误的风险。准确性很重要:在这种情况下,准确性至关重要。像我写的这样一个简单的脚本可以确保您不会忽略任何事情,这在处理关键数据时尤其重要。利用你的编程技能:有时,我们会陷入手动做事的困境,即使我们有能力让我们的生活更轻松。花点时间退一步问自己,“有没有更有效的方法来做到这一点?”

最终,一开始令人厌烦且容易出错的任务变成了一次有益的体验。现在,每当我接到感觉乏味或容易出错的任务时,我都会提醒自己脚本和自动化的力量。我想知道接下来我还可以简化多少其他任务……

您可以通过克隆我创建的 xml checker 存储库来快速开始这种自动化。这将为您提供所需的一切,包括脚本和示例文件。从那里,您将能够自己运行自动化,对其进行自定义以满足您的需求或进一步扩展其功能。

尽情享受!

以上就是我使用 Python 自动化 XML 字段检查的那一天的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1349012.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 12:30:31
下一篇 2025年12月13日 12:30:43

相关推荐

  • 如何解决本地图片在使用 mask JS 库时出现的跨域错误?

    如何跨越localhost使用本地图片? 问题: 在本地使用mask js库时,引入本地图片会报跨域错误。 解决方案: 要解决此问题,需要使用本地服务器启动文件,以http或https协议访问图片,而不是使用file://协议。例如: python -m http.server 8000 然后,可以…

    2025年12月24日
    200
  • 使用 Mask 导入本地图片时,如何解决跨域问题?

    跨域疑难:如何解决 mask 引入本地图片产生的跨域问题? 在使用 mask 导入本地图片时,你可能会遇到令人沮丧的跨域错误。为什么会出现跨域问题呢?让我们深入了解一下: mask 框架假设你以 http(s) 协议加载你的 html 文件,而当使用 file:// 协议打开本地文件时,就会产生跨域…

    2025年12月24日
    200
  • HTML、CSS 和 JavaScript 中的简单侧边栏菜单

    构建一个简单的侧边栏菜单是一个很好的主意,它可以为您的网站添加有价值的功能和令人惊叹的外观。 侧边栏菜单对于客户找到不同项目的方式很有用,而不会让他们觉得自己有太多选择,从而创造了简单性和秩序。 今天,我将分享一个简单的 HTML、CSS 和 JavaScript 源代码来创建一个简单的侧边栏菜单。…

    2025年12月24日
    200
  • 前端代码辅助工具:如何选择最可靠的AI工具?

    前端代码辅助工具:可靠性探讨 对于前端工程师来说,在HTML、CSS和JavaScript开发中借助AI工具是司空见惯的事情。然而,并非所有工具都能提供同等的可靠性。 个性化需求 关于哪个AI工具最可靠,这个问题没有一刀切的答案。每个人的使用习惯和项目需求各不相同。以下是一些影响选择的重要因素: 立…

    2025年12月24日
    000
  • 带有 HTML、CSS 和 JavaScript 工具提示的响应式侧边导航栏

    响应式侧边导航栏不仅有助于改善网站的导航,还可以解决整齐放置链接的问题,从而增强用户体验。通过使用工具提示,可以让用户了解每个链接的功能,包括设计紧凑的情况。 在本教程中,我将解释使用 html、css、javascript 创建带有工具提示的响应式侧栏导航的完整代码。 对于那些一直想要一个干净、简…

    2025年12月24日
    000
  • 布局 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在这里查看视觉效果: 固定导航 – 布局 – codesandbox两列 – 布局 – codesandbox三列 – 布局 – codesandbox圣杯 &#8…

    2025年12月24日
    000
  • 隐藏元素 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看隐藏元素的视觉效果 – codesandbox 隐藏元素 hiding elements hiding elements hiding elements hiding elements hiding element…

    2025年12月24日
    400
  • 居中 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看垂直中心 – codesandbox 和水平中心的视觉效果。 通过 css 居中 垂直居中 centering centering centering centering centering centering立即…

    2025年12月24日 好文分享
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 如何在移动端实现子 div 在父 div 内任意滑动查看?

    如何在移动端中实现让子 div 在父 div 内任意滑动查看 在移动端开发中,有时我们需要让子 div 在父 div 内任意滑动查看。然而,使用滚动条无法实现负值移动,因此需要采用其他方法。 解决方案: 使用绝对布局(absolute)或相对布局(relative):将子 div 设置为绝对或相对定…

    2025年12月24日
    000
  • 移动端嵌套 DIV 中子 DIV 如何水平滑动?

    移动端嵌套 DIV 中子 DIV 滑动 在移动端开发中,遇到这样的问题:当子 DIV 的高度小于父 DIV 时,无法在父 DIV 中水平滚动子 DIV。 无限画布 要实现子 DIV 在父 DIV 中任意滑动,需要创建一个无限画布。使用滚动无法达到负值,因此需要使用其他方法。 相对定位 一种方法是将子…

    2025年12月24日
    000
  • 移动端项目中,如何消除rem字体大小计算带来的CSS扭曲?

    移动端项目中消除rem字体大小计算带来的css扭曲 在移动端项目中,使用rem计算根节点字体大小可以实现自适应布局。但是,此方法可能会导致页面打开时出现css扭曲,这是因为页面内容在根节点字体大小赋值后重新渲染造成的。 解决方案: 要避免这种情况,将计算根节点字体大小的js脚本移动到页面的最前面,即…

    2025年12月24日
    000
  • Nuxt 移动端项目中 rem 计算导致 CSS 变形,如何解决?

    Nuxt 移动端项目中解决 rem 计算导致 CSS 变形 在 Nuxt 移动端项目中使用 rem 计算根节点字体大小时,可能会遇到一个问题:页面内容在字体大小发生变化时会重绘,导致 CSS 变形。 解决方案: 可将计算根节点字体大小的 JS 代码块置于页面最前端的 标签内,确保在其他资源加载之前执…

    2025年12月24日
    200
  • Nuxt 移动端项目使用 rem 计算字体大小导致页面变形,如何解决?

    rem 计算导致移动端页面变形的解决方法 在 nuxt 移动端项目中使用 rem 计算根节点字体大小时,页面会发生内容重绘,导致页面打开时出现样式变形。如何避免这种现象? 解决方案: 移动根节点字体大小计算代码到页面顶部,即 head 中。 原理: flexível.js 也遇到了类似问题,它的解决…

    2025年12月24日
    000
  • 形状 – CSS 挑战

    您可以在 github 仓库中找到这篇文章中的所有代码。 您可以在此处查看 codesandbox 的视觉效果。 通过css绘制各种形状 如何在 css 中绘制正方形、梯形、三角形、异形三角形、扇形、圆形、半圆、固定宽高比、0.5px 线? shapes 0.5px line .square { w…

    2025年12月24日
    000
  • 有哪些美观的开源数字大屏驾驶舱框架?

    开源数字大屏驾驶舱框架推荐 问题:有哪些美观的开源数字大屏驾驶舱框架? 答案: 资源包 [弗若恩智能大屏驾驶舱开发资源包](https://www.fanruan.com/resource/152) 软件 [弗若恩报表 – 数字大屏可视化组件](https://www.fanruan.c…

    2025年12月24日
    000
  • 网站底部如何实现飘彩带效果?

    网站底部飘彩带效果的 js 库实现 许多网站都会在特殊节日或活动中添加一些趣味性的视觉效果,例如点击按钮后散发的五彩缤纷的彩带。对于一个特定的网站来说,其飘彩带效果的实现方式可能有以下几个方面: 以 https://dub.sh/ 网站为例,它底部按钮点击后的彩带效果是由 javascript 库实…

    2025年12月24日
    000
  • 网站彩带效果背后是哪个JS库?

    网站彩带效果背后是哪个js库? 当你访问某些网站时,点击按钮后,屏幕上会飘出五颜六色的彩带,营造出庆祝的氛围。这些效果是通过使用javascript库实现的。 问题: 哪个javascript库能够实现网站上点击按钮散发彩带的效果? 答案: 根据给定网站的源代码分析: 可以发现,该网站使用了以下js…

    好文分享 2025年12月24日
    100
  • 产品预览卡项目

    这个项目最初是来自 Frontend Mentor 的挑战,旨在使用 HTML 和 CSS 创建响应式产品预览卡。最初的任务是设计一张具有视觉吸引力和功能性的产品卡,能够无缝适应各种屏幕尺寸。这涉及使用 CSS 媒体查询来确保布局在不同设备上保持一致且用户友好。产品卡包含产品图像、标签、标题、描述和…

    2025年12月24日
    100
  • 如何利用 echarts-gl 绘制带发光的 3D 图表?

    如何绘制带发光的 3d 图表,类似于 echarts 中的示例? 为了实现类似的 3d 图表效果,需要引入 echarts-gl 库:https://github.com/ecomfe/echarts-gl。 echarts-gl 专用于在 webgl 环境中渲染 3d 图形。它提供了各种 3d 图…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信