我正在尝试迭代目录中的一堆.xml文件。
为此,我编写了一个python脚本:
#!/usr/bin/python3.5
import os
import glob
pathToDirectory = '/home/anton/Documents/Repo_from_GitHub/ResiShared/templates/'
for filename in os.listdir(pathToDirectory):
file = open(pathToDirectory.__add__(filename), "r")
count = 0
for line in file:
if line.__contains__('xmlns="http://xml.juniper.net/xnm/1.1/xnm"') \
| line.__contains__('xmlns="http://tail-f.com/ned/cisco-ios-xr"') \
| line.__contains__('xmlns="http://tail-f.com/ned/arista-dcs"'):
++count
elif line.__contains__('tags="replace"'):
--count
elif (line.__contains__('</config>') \
| line.__contains__('</config-template>')) & count > 0:
print ('There are ' + str(count) + ' tags="replace" missing in the ' + file.name)它的工作没有任何错误发现,但我也没有从最后一个"elif“输出,但它肯定是。
下面是.xml文件的一个示例:xml文件示例
更新:我这里不需要任何类型的XML解析器,核心Python功能应该足够了。
发布于 2019-08-30 08:36:25
python不支持++和--运算符。因此,当您执行++count和--count时,count的值没有任何变化,count > 0始终是False。
注意,它不会引发异常,因为它是一个有效的代码。实际上,++count是连续应用一元运算符+两次(即+(+count))。-- (-(-count))也是如此。
考虑到xml文件,您希望line.__contains__('</config-template>')) & count > 0是True,但它不是。
我同意@King‘’sjester的评论,也同意你为什么直接调用像__contain__()这样的call方法?这至少会降低代码的可读性,使IMHO变得丑陋。我会使用@mannojlds的建议来查找更多的pythonic工具来解析xml文件。
>>> line = 'spam'
>>> count = 0
>>> line.__contains__('eggs') & count > 0
False编辑,包括对一元运算符的解释。
发布于 2019-08-30 08:45:11
正如buran所指出的,python中没有++操作符,因此count的值保持在0。更改以下内容可以解决您的问题:
++count应该是count += 1
--count应该是count -= 1
|符号是按位运算符,而应该使用or。
https://stackoverflow.com/questions/57722871
复制相似问题