打开文件仅知道其名称的一部分


问题内容

我目前正在读取文件,并使用以下行将数据导入其中:

# Read data from file.
data = np.loadtxt(join(mypath, 'file.data'), unpack=True)

知道变量的地方mypath。问题在于,文件file.data将随着时间的推移而更改,假设名称如下:

file_3453453.data
file_12324.data
file_987667.data
...

所以,我需要一种方法来告诉代码打开在具有类似名称路径的文件file*.data,假设总是会有只有 一个
由路径名的文件。有办法做到python吗?


问题答案:

您可以使用该glob模块。它允许对文件名进行模式匹配,并完全满足您的要求

import glob

for fpath in glob.glob(mypath):
    print fpath

例如,我有一个目录,其中包含名为google.xml,google.json和google.csv的文件。

我可以这样使用glob:

>>> import glob
>>> glob.glob('g*gle*')
['google.json', 'google.xml', 'google.csv']

请注意,globfnmatch模块使用模块,但具有更简单的界面,并且仅匹配路径而不是文件名。

您可以搜索相对路径,而不必使用os.path.join。在上面的示例中,如果我切换到父目录并尝试匹配文件名,它将返回相对路径:

>>> import os
>>> import glob
>>> os.chdir('..')
>>> glob.glob('foo/google*')
['foo/google.json', 'foo/google.xml', 'foo/google.csv']