文件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来查找结尾的文件。搜索条件
答案 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'
是一个列出部分文件名的文件。