2

使用此代码,我希望它搜索名称为 sh 的所有文件,例如 sh.c、sh.txt、sh.cpp 等。但是除非我编写lookfor=sh.txtlookfor=sh.pdf而不是,否则此代码不会搜索在下面的代码中查找=sh 。因此,我希望通过编写lookfor=sh来搜索所有名为 sh 的文件。请帮助。

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
4

5 回答 5

3

尝试全局:

import glob
print glob.glob('sh.*') #this will give you all sh.* files in the current dir
于 2013-04-22T20:08:06.813 回答
2

代替:

if lookfor in files:

和:

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

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

于 2013-04-22T20:05:54.730 回答
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
于 2013-04-22T20:07:12.860 回答
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)
于 2013-04-22T20:08:07.570 回答
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 的文档。

于 2013-04-22T20:07:18.353 回答