小编mid*_*ori的帖子

在 Python 中使用 ElementTree 解析带有命名空间的 XML

我有一个 xml,它的一小部分看起来像这样:

<?xml version="1.0" ?>
<i:insert xmlns:i="urn:com:xml:insert" xmlns="urn:com:xml:data">
  <data>
    <image imageId="1"></image>
    <content>Content</content>
  </data>
</i:insert>
Run Code Online (Sandbox Code Playgroud)

当我使用解析它ElementTree并将其保存到文件时,我看到以下内容:

<ns0:insert xmlns:ns0="urn:com:xml:insert" xmlns:ns1="urn:com:xml:data">
  <ns1:data>
    <ns1:image imageId="1"></ns1:image>
    <ns1:content>Content</ns1:content>
  </ns1:data>
</ns0:insert>
Run Code Online (Sandbox Code Playgroud)

为什么它会改变前缀并将它们放在任何地方?使用minidom我没有这样的问题。配置了吗?的文档ElementTree很差。问题是,我无法找到任何节点,解析后,例如image-不能带或不带命名空间找到它,如果我使用它像{namespace}image或只image。为什么?任何建议都非常感谢。

我已经尝试过的:

import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
for a in root.findall('ns1:image'):
    print a.attrib
Run Code Online (Sandbox Code Playgroud)

这将返回一个错误,而另一个不返回任何内容:

for a in root.findall('{urn:com:xml:data}image'):
    print a.attrib
Run Code Online (Sandbox Code Playgroud)

我也尝试制作这样的命名空间并使用它:

namespaces = {'ns1': 'urn:com:xml:data'}
for a in root.findall('ns1:image', namespaces):
    print a.attrib
Run Code Online (Sandbox Code Playgroud)

它什么都不返回。我究竟做错了什么?

python xml elementtree xml-parsing python-2.7

1
推荐指数
1
解决办法
6315
查看次数

提高删除窗口行结尾的Bash循环的性能

编者注:这个问题总是关于循环性能,但最初的标题导致一些回答者 - 和选民 - 相信它是关于如何删除Windows行结尾.

下面的bash循环只是删除windows行结尾并将它们转换为unix并且似乎正在运行,但它很慢.输入文件很小(4个文件,范围从167字节 - 1 kb),并且都是相同的结构(名称列表),唯一不同的是长度(即一些文件是10个名称,其他文件是50).是否需要花费超过15分钟才能使用至强处理器完成此任务?谢谢 :)

for f in /home/cmccabe/Desktop/files/*.txt ; do
 bname=`basename $f`
 pref=${bname%%.txt}
sed 's/\r//' $f - $f > /home/cmccabe/Desktop/files/${pref}_unix.txt
done
Run Code Online (Sandbox Code Playgroud)

输入.txt文件

AP3B1
BRCA2
BRIP1
CBL
CTC1
Run Code Online (Sandbox Code Playgroud)

编辑

这不是重复,因为我更多地要求为什么我用于删除Windows行结尾的bash循环sed运行得如此之慢.我不是故意暗示如何删除它们,是在寻求可能加速循环的想法,而且我得到了很多.谢谢 :).我希望这有帮助.

linux bash performance sed gawk

1
推荐指数
2
解决办法
229
查看次数

计算每个字母在文本样本中出现的次数

我需要一个函数来计算每个字母出现在字符串中的次数.它必须将大写字母和小写字母统计为相同的字母.我有点做了,但它并不完美.

def lmao(x):

    aye=x.count("a")
    Aye=x.count("A")
    bye=x.count("b")
    Bye=x.count("B")
    cye=x.count("c")
    Cye=x.count("C")
    dye=x.count("d")
    Dye=x.count("D")
    Eye=x.count("E")
    eye=x.count("e")
    Fye=x.count("F")
    fye=x.count("f")
    Gye=x.count("G")
    gye=x.count("g")
    Hye=x.count("H")
    hye=x.count("h")
    Iye=x.count("I")
    iye=x.count("i")
    Jye=x.count("J")
    jye=x.count("j")
    Kye=x.count("K")
    kye=x.count("k")
    Lye=x.count("L")
    lye=x.count("l")
    Mye=x.count("M")
    mye=x.count("m")
    Nye=x.count("N")
    nye=x.count("n")
    Oye=x.count("O")
    oye=x.count("o")
    Pye=x.count("P")
    pye=x.count("P")
    Qye=x.count("Q")
    qye=x.count("q")
    rye=x.count("r")
    Rye=x.count("R")
    sye=x.count("s")
    Sye=x.count("S")
    tye=x.count("t")
    Tye=x.count("T")
    uye=x.count("u")
    Uye=x.count("U")
    Vye=x.count("V")
    vye=x.count("v")
    Wye=x.count("W")
    wye=x.count("w")
    Xye=x.count("X")
    xye=x.count("x")
    Yye=x.count("Y")
    yye=x.count("y")
    Zye=x.count("Z")
    zye=x.count("z")
    killme=(aye+Aye,bye+Bye,cye+Cye,Dye+dye,Eye+eye,Fye+fye,Gye+gye,Hye+hye,Iye+iye,jye+Jye,Kye+kye,Lye+lye,Mye+mye,Nye+nye,Oye+oye,Pye+pye,Qye+qye,rye+Rye,sye+Sye,Tye+tye,uye+Uye,Vye+vye,Wye+wye,xye+Xye,Yye+yye,Zye+zye)
    return killme
Run Code Online (Sandbox Code Playgroud)

所以,是的,那就是我想出的灾难.有没有办法缩短这个过程?

python python-2.x python-2.7

1
推荐指数
1
解决办法
1089
查看次数

使用sed或脚本解析,重新格式化日志文件?

我有一个案例,我需要一个文件post-process.样本格式如下: -

bigspeedpro.com Intel::DOMAIN   from http://malc0de.com/bl/BOOT via intel.criticalstack.com     F
1.1.1.1 Intel::DOMAIN   from http://abcd.com/bl/BOOT via intel.criticalstack.com     F
Run Code Online (Sandbox Code Playgroud)

预期产量为: -

1.1.1.1 abcd
Run Code Online (Sandbox Code Playgroud)

解析如下: -

  • 任何不以IP地址开头的内容都会删除该行
  • 如果以IP地址开头

    • 删除Intel :: DOMAIN
    • 之间根据以下字符串出现 from F替换它
    • 例如malc0de或abcd

我想使用,sed但我不知道如果sed可以用来匹配多个字符串,例如malc0de或abc或许我需要一个更完整的脚本然后只是一行存储字符串值在数组中.任何的想法?顺便说一句,使用的例子sed最受欢迎.

至今

  • 我知道d在sed中使用我可以删除行并将输出重定向到文件
  • 我知道如何匹配正则表达式而不是IP地址[^ a-zA-Z]
  • 我基于多项选择或字符串而无法更换
\#!/bin/bash          
sed -i s/\[a-zA-Z]\/d test ./infile > testme.txt
sed -i s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/s+\Intel::DOMAIN\\s*from(.*?)\s+F\1malc0de
Run Code Online (Sandbox Code Playgroud)

或者我想保存像ARRAY =(malc0de abcd)

然后代替捕获组我可以做$ {ARRAY [2]}它会起作用吗?或者我可以做一些像.net子串匹配之间的东西 fromF我复制结果的字符串变量.然后搜索我的字符串,例如malc0de,如果找到替换匹配结果的搜索模式?但我不知道bash ......

更新 使用awk脚本我很干净

1.1.1.1 www.abc.com
1.1.2.2 def.com
2.2.2.2 mnx.dbc.net
Run Code Online (Sandbox Code Playgroud)

但是,我希望将ip地址后的第二列缩短为我自己选择的字符串,例如在第二列中我只接受

abc def …

regex linux bash ubuntu sed

-1
推荐指数
1
解决办法
181
查看次数

基于城市的地图上的Python地图点

我在python列表上有一个城市列表:

Citylist = ["Lexington, KY", "New York, NY", "Tampa FL"]
Run Code Online (Sandbox Code Playgroud)

如何使用python在地图上添加这些点(最好是交互式地图)?有没有办法,我可以使用谷歌地图或其他服务,但直接从python代码发送数据.

python

-1
推荐指数
1
解决办法
1413
查看次数