Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Find方法查找精确匹配_Python_Python 2.7 - Fatal编程技术网

Python 使用Find方法查找精确匹配

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

在这段代码中,我解压缩一个文件以搜索一个名为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 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'Donnell
ziproot.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():