【发布时间】:2013-06-11 15:51:28
【问题描述】:
我正在尝试编写一个函数,该函数在当前目录及其子文件夹中查找特定文件的第一个实例,并将相对路径作为字符串返回。
def findFirstMatch(targetFile):
try:
fileMatched = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, targetFile):
fileMatched.append(os.path.join(root, filename))
if len(fileMatched) != 0:
fileMatched = str(fileMatched)
return fileMatched
if len(fileMatched) == 0:
raise NotFoundError, 'File could not be found.'
except NotFoundError, error:
print error
当我这样调用函数时:
csvPath = findFirstMatch('bounding_box_limits.csv')
在 Python 控制台中运行时收到此错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "MassSpringDamperCAD.py", line 121, in <module>
main()
File "MassSpringDamperCAD.py", line 90, in main
with open(csvPath, 'r') as csvFile:
IOError: [Errno 2] No such file or directory: "['.\\\\common\\\\bounding_box_limits.csv']"
它找到了文件,但所有这些额外的反斜杠是如何在文件路径中结束的?
注意:我使用的是 Windows 7 和 Python 2.7.3。
【问题讨论】:
-
那个字符串是从哪里来的?
-
这真的是代码吗,因为您在循环中不断将 lastFilename 设置为文件名,然后用它覆盖 fileMatched。我不明白 os.path.join 是如何参与其中的
-
@TomTanner 这是一个错误,我正在测试替代输出以确定四重反斜杠的来源。我已将代码更正为实际情况。
-
@AlexChamberlain 我编辑了帖子以包含完整的错误消息和回溯信息。当
fnmatch.filter()找到符合字符串参数targetFile的条件的filenames元素时,该字符串将返回。我确信没有fnmatch有更好的方法来做到这一点,但我还没有找到它。
标签: python windows python-2.7 append os.path