使用glob来完成文件名(python)

时间:2016-03-27 21:47:18

标签: python-2.7

文件myfilepaths的内容是:

/current/0.e_head/10000000d.000000002__head
/current/0.13_head/10000008.000000001__head
..(cont'd)

实际的文件名是:

/current/0.e_head/10000000d.000000002__head_918293
/current/0.13_head/10000008.000000001__head_9891283
..(cont'd)

我的代码是:

filepath = '/path/to/directory/myfilepaths'
location = raw_input('Where is the file? ')

with open(filepath, 'r') as mf:
    for line in mf:
    nline = line.replace("\n", "")
#   cline = glob.glob(nline + '*')  #PROBLEM LINE
    path_obj = os.path.join(location + str(nline))
    obj_stats = os.stat(path_obj)

我想要做的是使用glob来为我完成文件名,因为文件名的结尾不够确定,不能硬编码。通过raw_input创建的location通常类似于/ var / local / etc.

目前,如果我使用粘贴在此处的代码,我会收到错误消息:

 no such file or directory: '/var/local/0.e_head/1000000d.000000002_head'

如果我删除评论并将nline替换为cline中的path_obj,我会:

OSError:[Errno 2]没有这样的文件或目录' / var / local []'

现在我在SO上看到了很多东西,它展示了如何使用glob来匹配某些文件,比如* .txt等,但我还没有看到任何使用glob来查找结尾的文件。搜索条件

1 个答案:

答案 0 :(得分:1)

glob 返回一个列表,因此即使您找到匹配项,调用str也无法正常工作,您还需要在搜索时将文件名加入路径:

from glob import iglob

with open(filepath, 'r') as mf:
    for line in mf:
        path_obj = next(iglob(os.path.join(location, line.strip() + '*')))
        obj_stats = os.stat(path_obj)

一旦路径正确,glob应该找到文件就好了,唯一的问题是如果你有重叠的模式,每个文件名的第一部分必须是唯一的,你的逻辑才能工作。我还假设'/path/to/directory/myfilepaths'是一个列出部分文件名的文件。