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

arknldoa  于 2023-03-16  发布在  Python
关注(0)|答案(4)|浏览(126)

我目前正在阅读一个文件并导入其中的数据,代码如下:

# 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的文件,假设路径中始终只有 * 一个 * 文件使用该名称。

jgzswidk

jgzswidk1#

您可以使用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']

注意,glob使用fnmatch模块,但是它有一个更简单的接口,并且它匹配路径而不仅仅是文件名。
你可以搜索相对路径,而不必使用os.path.join。在上面的例子中,如果我切换到父目录并尝试匹配文件名,它会返回相对路径:

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

lbsnaicq2#

还可以查看fnmatch

>>> import fnmatch
>>> import os
>>>
>>> fnmatch.filter(os.listdir('.'), 'file_*.data')
['file_3453453.data']
>>>
h5qlskok

h5qlskok3#

一个简单的解决方案是使用python模块“os”和“re”:

import os
import re
for file in os.listdir(mypath):
     if re.match("file_\d+\.data", file):
     ...
icomxhvb

icomxhvb4#

试试看

import os

[os.path.join(root, f) for root, _, files in os.walk(mypath)
                       for f in files
                       if f.startswith('file') and f.endswith('.data')]

它会返回一个包含所有文件file*.data的列表,如果有多个文件,你可以遍历它们,如果只有一个文件,就把[0]放在列表解析的末尾。

相关问题