使用此代码 我希望它搜索所有名称为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
答案 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的文档。