微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用python xml或simplified_scrapy

如何解决使用python xml或simplified_scrapy

我正在尝试将 1 个 XML 文件转换为 CSV/xls。我试过下面的代码,但似乎不起作用。 我必须为 Role = Base 的“NodeName”获取 CentreFrequency。 下面是示例 XML https://pastebin.com/Ln4Ug0hN

from bs4 import BeautifulSoup
import pandas as pd
import lxml
import xml.etree.cElementTree
import openpyxl
import inspect
import os
import tkinter
from tkinter import filedialog

root = tkinter.Tk()
dirname = filedialog.askopenfilename(parent=root,initialdir="/",title='Please select a file')




root = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))

sites = "xmll.xml"

with open(sites,"r",encoding='unicode_escape') as f:
    xml_data = f.read()

soup = BeautifulSoup(xml_data,"xml")
#ss=soup.find_all("NodeName").text
# 'INAPKVLIVglrTW6001ENBIB5004'


tag1 = input("Enter tagname1:")
tag2 = input("Enter tagname2:")
# in a loop

data = []
dd = []

for td in soup.find_all(tag1):
    data.append({"Name": td.text})
    
for snmp in soup.find_all(tag2):
    dd.append({"CentreFrequency": snmp.text})

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(dd)
    
df = pd.merge(df1,df2,left_index=True,right_index=True)
 

解决方法

我从一个名为“simplified_scrapy”的用户那里找到了一个非常容易用于 XML 到 CVS 的库 以下是您可以尝试的解决方案

from simplified_scrapy import SimplifiedDoc,utils,req
import inspect
import time
import os
import pandas as pd

def delEmptyRows(name,encoding="utf-8"):
    lines = utils.getFileLines(name,encoding=encoding)
    lines = [line for line in lines if line.strip()!='']
    utils.saveFile(name,"".join(lines),encoding=encoding)

root = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))

xml = utils.getFileContent(root +'/xml.xml')
#xml = open('mumbai2.xml','r').read
doc = SimplifiedDoc(xml)
lstNodeResult = doc.selects('IBridge2ConfigResult')
data = [['NodeName','CenterFrequency']]

for result in lstNodeResult:
    lstrole = result.selects('IBridge2Config>Role')

    frequency =  result.CenterFrequency.text       
    NodeName = result.NodeName.text
    row = [NodeName,frequency]

    if NodeName !=' ':    
        data.append(row)
    # print (data)
    utils.save2csv('Frequency_List.csv',data)
    delEmptyRows('Frequency_List.csv')



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?