正在搜索文件python

时间:2013-04-22 20:00:09

标签: python

使用此代码 我希望它搜索所有名称为sh sh,sh.txt,sh.cpp等的文件。但是除非我写 lookfor = sh.txt ,否则此代码不会搜索lookfor = sh.pdf 而不是以下代码中的 lookfor = sh 。 因此,我希望通过编写 lookfor = sh 来搜索名为sh.Please help的所有文件。

import os
from os.path import join
lookfor = "sh"
for root, dirs, files in os.walk('C:\\'):
    if lookfor in files:
          print "found: %s" % join(root, lookfor)
          break

5 个答案:

答案 0 :(得分:3)

尝试glob:

import glob
print glob.glob('sh.*') #this will give you all sh.* files in the current dir

答案 1 :(得分:2)

替换:

if lookfor in files:

使用:

for filename in files:
    if filename.rsplit('.', 1)[0] == lookfor:

filename.rsplit('.', 1)[0]删除在点(==扩展名)后找到的文件的最右边部分。如果文件中有多个点,我们将其余部分保留在文件名中。

答案 2 :(得分:1)

该行

if lookfor in files:

如果列表files包含lookfor中给出的字符串,则应执行以下代码。

但是,您希望测试应该是找到的文件名使用给定字符串启动并继续.

此外,您希望确定真实的文件名。

所以你的代码应该是

import os
from os.path import join, splitext
lookfor = "sh"
found = None
for root, dirs, files in os.walk('C:\\'):
    for file in files: # test them one after the other
        if splitext(filename)[0] == lookfor:
            found = join(root, file)
            print "found: %s" % found
            break
    if found: break

这甚至可以改进,因为我不喜欢打破外部for循环的方式。

也许你想把它作为一个功能:

def look(lookfor, where):
    import os
    from os.path import join, splitext
    for root, dirs, files in os.walk(where):
        for file in files: # test them one after the other
            if splitext(filename)[0] == lookfor:
                found = join(root, file)
                return found

found = look("sh", "C:\\")
if found is not None:
    print "found: %s" % found

答案 3 :(得分:1)

据推测,您希望搜索 sh 作为 basename 的文件。 (名称中不包括路径和扩展名的部分。)您可以使用filter模块中的fnmatch函数执行此操作。

import os
from os.path import join
import fnmatch
lookfor = "sh.*"
for root, dirs, files in os.walk('C:\\'):
    for found in fnmatch.filter(files, lookfor):
        print "found: %s" % join(root, found)

答案 4 :(得分:0)

import os
from os.path import join
lookfor = "sh."
for root, dirs, files in os.walk('C:\\'):
    for filename in files: 
      if filename.startswith(lookfor):
           print "found: %s" % join(root, filename)

您可能也想阅读fnmatch和glob的文档。