Python 使用Find方法查找精确匹配
在这段代码中,我解压缩一个文件以搜索一个名为node.txt的特定文件,但是如果我有更多名为node.txt.old或node.txt.new的文件,它会显示在搜索中 那么,简言之,我如何限制Python 使用Find方法查找精确匹配,python,python-2.7,Python,Python 2.7,在这段代码中,我解压缩一个文件以搜索一个名为node.txt的特定文件,但是如果我有更多名为node.txt.old或node.txt.new的文件,它会显示在搜索中 那么,简言之,我如何限制loop\u package.find(“node.txt”)只匹配确切的文件 import zipfile import re ziproot = zipfile.ZipFile('c:\\zips\somezip.zip') node_list = [] for loop_package in zip
loop\u package.find(“node.txt”)
只匹配确切的文件
import zipfile
import re
ziproot = zipfile.ZipFile('c:\\zips\somezip.zip')
node_list = []
for loop_package in ziproot.namelist():
if loop_package.find("node.txt"):
for line in ziproot.read(loop_package).split("\n"):
if line.find("doc-node") >= 0:
node_dict = dict()
for iline in ziproot.read(loop_package).split("\n"):
if iline.find("node_nsName") >= 0:
mt = re.search(r'(.*>)(.*?)(<.*)', iline, re.M | re.I)
node_dict['filePath'] = loop_package
node_dict['nodeCon'] = mt.group(2)
node_list.append(node_dict)
else:
pass
else:
pass
else:
pass
导入zipfile
进口稀土
ziproot=zipfile.zipfile('c:\\zips\somezip.zip')
节点列表=[]
对于ziproot.namelist()中的loop_包:
如果循环_package.find(“node.txt”):
对于ziproot.read(loop\u package.split(“\n”)中的行:
如果line.find(“单据节点”)>=0:
node_dict=dict()
对于ziproot.read(loop\u package.split(“\n”)中的iline:
如果iline.find(“节点名称”)>=0:
mt=re.search(r'(.*)(.*)(.*)(使用endswith
而不是find
)
for loop_package in ziproot.namelist():
if loop_package.endswith("node.txt"):
由于loop_包是一个完整的文件路径,因此我们对这样一个字符串的结尾,即文件名感兴趣。您正在字符串列表中搜索字符串。Python使这变得非常简单
您不想使用find()方法。您想搜索ziproot.namelist(),如下所示:
提示:所有这些否则:pass
什么都不做。您可以完全删除它们,而不会影响脚本的操作。@iCodez我知道,但我认为保持if关闭会更有条理:)我不会这样做。没有理由遍历列表,只检查字符串是否在列表中更干净(当然它还是会遍历列表。)@RyanO'Donnellziproot.namelist()
的每个元素都包含文件的完整路径,比如'dir1/dir2/node.txt'
。检查ziproot.namelist()中的是否为'node.txt'
无法捕捉到。此外,他还需要对该项进行进一步处理,并且在不同的路径上可能存在多个。@RyanO'Donnell有理由遍历该列表。因为我需要检查每个文件的所有行。@Thales我想这是语义问题,但您当然也可以这样做:如果ziproot.namelist()中的“node.txt”\ziproot.read(“node.txt”).split(“\n”):或者,甚至不检查。只需将其包装在try/except块中,如果文件不存在,则会引发异常。@RyanO'Donnell感谢您的建议,但这段代码按原意工作。正如旧向导所说:一些人喜欢正方形,而另一些人喜欢圆形。在这种情况下,圆形很好:)
if "node.txt" in ziproot.namelist():