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

Gab*_*iel 5 python naming

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

# Read data from file.
data = np.loadtxt(join(mypath, 'file.data'), unpack=True)
Run Code Online (Sandbox Code Playgroud)

知道变量的地方mypath.问题是文件file.data会随着时间而变化,假设名称如下:

file_3453453.data
file_12324.data
file_987667.data
...
Run Code Online (Sandbox Code Playgroud)

因此,我需要一种方法来告诉代码在该路径中打开具有类似名称的文件file*.data,假设路径中始终只有该名称的一个文件.有没有办法做到这一点python?

MrD*_*MrD 13

您可以使用该glob模块.它允许在文件名上进行模式匹配,并完全按照您的要求进行操作

import glob

for fpath in glob.glob(mypath):
    print fpath
Run Code Online (Sandbox Code Playgroud)

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

我可以像这样使用glob:

>>> import glob
>>> glob.glob('g*gle*')
['google.json', 'google.xml', 'google.csv']
Run Code Online (Sandbox Code Playgroud)

请注意,它glob使用fnmatch模块但它具有更简单的接口,它只匹配路径而不是文件名.

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

>>> import os
>>> import glob
>>> os.chdir('..')
>>> glob.glob('foo/google*')
['foo/google.json', 'foo/google.xml', 'foo/google.csv']
Run Code Online (Sandbox Code Playgroud)


小智 5

另请查看fnmatch:

>>> import fnmatch
>>> import os
>>>
>>> fnmatch.filter(os.listdir('.'), 'file_*.data')
['file_3453453.data']
>>>
Run Code Online (Sandbox Code Playgroud)