【问题标题】:Python: Searching for exact filenamePython:搜索确切的文件名
【发布时间】:2013-09-03 18:46:09
【问题描述】:

在我当前目录中搜索 HTML 时,如果名称包含任何子字符串,它将假定文件存在并继续操作,而不是说文件不存在。假设我有一个文件“protocolHTTP.html” - 在测试中以确保“protocol.html”引发错误,但事实并非如此。它只是继续程序的运行。

我想确保文件名完全匹配。这是我所拥有的:

for file in glob.glob('*.html'):
        if protocolFile in file:
                with open(file) as f:
                        contents = f.read()
        else:
                print "Could not locate '" + protocolFile + ".html'"
                sys.exit(1)

我可以检查任何想法或进一步的步骤来验证这一点吗?

【问题讨论】:

    标签: python text io


    【解决方案1】:

    我认为您的代码与以下内容相同:

    if os.path.isfile(filename):
        with open(filename) as f:
            contents = f.read()
    else:
        print 'Could not locate {0}'.format(filename)
        sys.exit(1)
    

    【讨论】:

    • 啊哈,这就是我要找的东西!我的本质上是做同样的事情,但是 isfile() 将验证整个名称,而 if 'file' 不会并且会考虑子字符串的有效输入。如果我以任何方式使用“协议”,它将验证,但是如果我使用“菠萝”,则不会。感谢您的意见!
    • @Signus 那我还不太了解你。您想要整个文件匹配还是部分文件匹配?如果您只想要部分,为什么不使用:glob.glob('*partial*.html'),让glob 函数完成所有工作?
    • 我很抱歉,我试图获得完整的文件名匹配,并且我使用 'in' 就像 Brian 指出的那样不是相等检查。我试图解决这个问题,你帮我解决了这个问题。
    【解决方案2】:

    in 不是相等检查,而是集合成员资格检查。查看here 并向下滚动到项目符号列表之后以讨论in。

    >>> 'foo' in 'foobar'
    True
    >>> 'foo' in 'foo'
    True
    >>> 'foo' in 'bar'
    False
    

    并不是说在搜索一个文件时循环是个好主意,但如果您执行了以下操作,它会起作用。

    if '{}.html'.format(protocolFile) == os.path.basename(file):
    

    因此,总的来说,请采用 Viktor 的方法。但请确保您也了解 in 的工作原理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 2016-06-14
      • 2022-01-23
      • 2023-04-08
      相关资源
      最近更新 更多